配置Xcode的SwiftFormat格式化快捷键,更方便更快速格式化

xcode 没有格式化代码的功能,只有缩进整理和多行拆分,习惯前端代码的开发方式,不格式化代码显得有些凌乱,幸好有开源的工具可以实现这样的功能,他就是SwiftFormat。官方地址:GitHub - nicklockwood/SwiftFormat: A command-line tool and Xcode Extension for formatting Swift code

安装使用教程:Xcode代码格式化SwiftFormat安装使用,以及不生效问题-CSDN博客

但是安装完之后,每次格式化都要点击Editor 下面的格式化,很是不友好,所以这里教大家如何配置快捷键:

1.从 Xcode 的菜单打开 Preferences... ,选中 Key Bindings

2.在右上的 Filter 里输入 swiftformat ,然后选中第二个 SwiftFormat > Format File

3.双击高亮行对应 Key 的位置,然后同时按下键盘上的 command + L(如果你喜欢其它快捷键可自行选择)

然后回到编辑区,就会发现已经生效了。

经过上述步骤,我们就给 Xcode 安装好了 SwiftFormat 的 Source Editor Extension,而且可以用快捷键触发。现在你可以在 Xcode 里随意选中一个 Swift 文件,然后按下快捷键 command + L,SwiftFormat 就会根据它当前的规则对这个被选中的 Swift 文件进行代码风格的格式化。如果你的代码经过 Git 管理,应该能看到格式化前后的差异,比如一些空行、逗号、缩进之类。

SwiftFormat规则配置

刚才提到规则 ,你可以打开 SwiftFormat for Xcode.app ,选中第二个 Rules Tab 进行调整

Swift version 选择 5.5(目前版本 0.49.8 所支持的最高 Swift 版本)

取消勾选 Infer Options Automatically ,这样的话我们可以搜索并调整一些选项的参数,例如:

  • 勾选 acronyms ,保持 Acronyms 其值为 ID,URL,UUID,VC ,这样一些属性命名中的缩略词会被自动"纠正",以符合 Swift 的 API 设计指南
  • 勾选 blankLinesBetweenImports,会移除 import 语句之间的空行
  • 勾选 blockComments ,自动将注释换成 // 或 /// 风格
  • extensionAccessControl 。将其 Extension Access Control Level Placement 改为 on-declarations,以将访问控制定义在具体的属性或方法上
  • fileHeader 。将其 Header 改为 strip,以去除头部的文件注释
  • hoistPatternLet 。将其 Pattern Let 改为 inline ,以符合 Google 的规范
  • indent 。将其 Ifdef Indent 改为 no-indent ;Indent Strings 改为 true
  • modifierOrder 。将其 Modifier Oder 改为 open,public,final,fileprivate,private,private(set),override,convenience,lazy,static,weak,如果你不喜欢这个顺序可自行调整
  • spaceAroundOperators 。将其 Ranges 改为 no-space ,这样 ... 和 ..< 操作符前后的空格会被去除
  • unusedArguments 。将其 Strip Unused Arguments 改为 closure-only,防止一些方法的实参被替换为下划线
  • wrap 。将其 Max Width 改为 100,这样太长的代码会被折行(不过效果可能不好,最好是发现需要折行就手动调整)
  • 针对 wrapArguments ,将其
    • Wrap Arguments 改为 before-first
    • Wrap Collections 改为 before-first
    • Wrap Conditions 改为 preserve
    • Wrap Parameters 改为 before-first
    • Wrap Return Type 改为 preserve
    • Wrap Typealiases 改为 preserve

可搜索并关闭如下规则:

  • markTypes 。开启的话,会强制你写一些 // MARK: 标记
  • organizeDeclarations。开启的话,会按照更细致的规则对各种声明进行排序,可能不是你所希望的
  • sortedImports。开启的话,会将 import 的语句按照字母表排序
  • sortedSwitchCases。开启的话,会将 switch 的 case 语句按照字母表排序
  • wrapSwitchCases。开启的话,会强制 switch 时每个 case 单独一行

可进一步参考详细的规则文档

如果你觉得上面的设置比较繁琐,那也可以下载 nixzhu.swiftformat,然后在 SwiftFormat for Xcode.app 中,通过菜单 File -> Open... 打开它,即可导入上述规则

小技巧

如果你想将有多个参数的函数的参数进行折行,只需先将其尾部的括号换行(可在输入最后一个参数后进行),然后按下快捷键(比一个个手动换行要快不少)

Swift 复制代码
// 例如

func test(id: Int, name: String
) {}

test(id: 42: name: "nix"
)

// 将变为

func test(
    id: Int,
    name: String
) {}

test(
    id: 42,
    name: "nix"
)
相关推荐
周小董11 小时前
[1379]mac安装nvm
macos
bossjuemfc13 小时前
不记得文件名时,Mac 上的搜索还能怎么做?
macos
2501_9159090614 小时前
Windows 打开 Xcode 工程,编译调试 Xcode 项目并和 Mac 同事协作
ide·windows·vscode·macos·ios·个人开发·xcode
golang学习记15 小时前
比VS Code轻10倍,JetBrains开源全新AI IDE
ide·人工智能·jetbrains·thinkrail
请为小H留灯1 天前
Mac 常用操作与维护技巧
macos·电脑·清理电脑·常用技巧
hantmac1 天前
不记得文件名时,Mac 上的搜索还能怎么做?
人工智能·macos
这是谁的博客?1 天前
AI 加速器 RTL 数字系统设计深度解析:从 MAC 阵列 Verilog 实现到时序收敛与时钟功耗的芯片落地全链路
人工智能·macos·ai·verilog·数字ic设计·ai芯片·rtl
slacker-kian1 天前
M 系列 Mac 清除顽固的 CorpLink
macos·corplink·m系列
我要见SA姐12 天前
Chrome 内存泄漏诊断指南:从现象定位到根因排查
ide·vscode·python·自动化·编辑器
kk_net88992 天前
FSNotes:macOS 和 iOS 上的开源笔记管理器
笔记·其他·macos·ios