关注我,每天分享一个关于 iOS 的新知识
前言
SwiftLint 是 Realm 出品的一个用于强制检查 Swift 代码风格和规定的一个工具。到目前为止,这个仓库在 Github 上有 18 万颗星。可见是一个非常受欢迎的库。
SwiftLint 的原理是 Hook 了 Clang 和 SourceKit 从而能够使用 AST 来表示源代码文件的更多精确结果。
今天来讲讲如何在你的项目中使用。
安装
1、使用 Homebrew
在命令行中执行:
2、使用 CocoaPods(推荐)
也可以直接在你的 swift 项目中 Podfile 文件中增加:
ini
pod 'SwiftLint', :configuration => 'Debug'
一般来说只需要在 Debug 上安装就行了(无需带到线上),然后执行:
3、使用 Mint
命令行执行:
mint install realm/SwiftLint
使用方法
推荐使用 CocoaPods 安装 (我这里也用这种方式举例),这样多人开发的时候每个人无需再在电脑上安装一次,然后也能够很好的整合 SwiftLint 到 Xcode 体系中,从而可以使警告和错误显示到 Xcode 上。
打开 Xcode 你的项目,点击主 Target
,选择 Build Phases
,点击加号添加一个新的"Run Script Phase
",然后添加以下代码即可:
bash
${PODS_ROOT}/SwiftLint/swiftlint --fix
${PODS_ROOT}/SwiftLint/swiftlint lint
因为你已经在 Podfile 中添加了 SwiftLint, pod install
之后会安装在 ${PODS_ROOT}/SwiftLint/swiftlint
这个目录,所以可以直接这么执行。
这里涉及两个命令 --fix 用来自动矫正代码,lint 命令用来在 IDE 上显示警告或报错。
在 Xcode 15 中对 Build Settings
做了一些更改,因此,当你编译项目时,SwiftLint 会遇到与缺少文件权限相关的错误,解决办法是,打开 Build Settings
,搜索 enable_user_script
,将对应的选项改为 No 就行了。
此时当你编译项目时,swiftlint 会自动遍历你所有的代码,校验规范,然后根据规范来给出报错或者警告。
比如我的 AppDelegate 里的某个方法字符数超过了 120 个,就会给出一个警告,因为 SwiftLint 默认有一条规则是单行代码不能超过 120 个字符:
规则
随着 SwiftLint 不断发展,目前已经有超过 200 条规则了,你可以在 这个网站 找到规则的更新列表和更多信息。
1、默认规则
目前有 94 条规则是默认开启的,不需要独立配置,就包括常见的单行不能超过 120 字符、空格规范、换行规范等等。
2、Opt-In 规则
Opt-In 规则目前有 134 条,默认不开启,如果想要开启,需要通过配置文件来单独声明,其中包括一些可开可不开的规范,比如把 count > 0 换成 isEmpty、限制强制解包等等。
3、如何在代码中关闭某个规则
有时候可能因为某些原因,不得不在特定的代码中关掉某个规则,SwiftLint 也给出了相关的命令:
xml
// swiftlint:disable <rule1> [<rule2> <rule3>...]
比如我想关掉单行 120 字符的规则,可以在 AppDelegate 文件中写入:
arduino
// swiftlint:disable line_length
line_length
就是限制 120 字符的规则名。
当 SwiftLint 读到这行注释时,就会开始在下一行代码中忽略 line_length
这个规则,记得在需要开启时用 enable
来开启,比如我需要关掉 AppDelegate 这个文件所有代码的 line_length
规则,则可以在第一行写
arduino
// swiftlint:disable line_length
在最后一行写 enable 来重新开启:
arduino
// swiftlint:enable line_length
也可以使用 swiftlint:disable all
来禁用所有规则。
还支持在 disable 关键字后增加更确切的参数,比如:
-
swiftlint:disable:next line_length
: 关闭下一行代码的line_length
规则 -
swiftlint:disable:this line_length
: 关闭本行代码的line_length
规则 -
swiftlint:disable:previous line_length
: 关闭上一行代码的line_length
规则
自定义配置
前面说了如果想打开 Opt-In 规则需要用到配置文件,可以在你项目的根目录下添加一个 .swiftlint.yml
文件的方式来配置 SwiftLint。可以被配置的参数有:
-
disabled_rules: 关闭某些默认开启的规则。
-
opt_in_rules: 一些规则是可选的。
-
only_rules: 不可以和 disabled_rules 或者 opt_in_rules 并列。类似一个白名单,只有在这个列表中的规则才是开启的。
我这里来举个例子,我要禁用默认开启的 line_length
规则,并开启 Opt-In 规则中的 empty_count
规则,那么我的 .swiftlint.yml
文件为:
makefile
disabled_rules:
- line_length
opt_in_rules:
- empty_count
然后再次运行项目,发现 line_length 的警告没有了。
当我使用 count == 0 来判空时,SwiftLint 给我了一个警告,这个就是 empty_count 规则在起作用:
SwiftLint 还支持一些更精细的配置,比如 line_length
默认 120 个字符,我觉得太少了,那么你可以在 .swiftlint.yml
文件中新增一行来改成 150 个:
makefile
opt_in_rules:
- empty_count
line_length: 150
更多配置相关的内容可以到 SwiftLint 官方文档中查看
参考资料
[1]
SwiftLint 规则列表: realm.github.io/SwiftLint/r...
[2]
SwiftLint 官方文档: github.com/realm/Swift...
这里每天分享一个 iOS 的新知识,快来关注我吧
本文同步自微信公众号 "iOS新知",每天准时分享一个新知识,这里只是同步,想要及时学到就来关注我吧!