重视我,每天共享一个关于 iOS 的新知识

前语

SwiftLint 是 Realm 出品的一个用于强制查看 Swift 代码风格和规定的一个工具。到现在为止,这个库房在 Github 上有 18 万颗星。可见是一个非常受欢迎的库。

SwiftLint 的原理是 Hook 了 Clang 和 SourceKit 从而能够运用 AST 来表示源代码文件的更多准确成果。

今日来讲讲如安在你的项目中运用。

装置

1、运用 Homebrew

命令行中履行:

2、运用 CocoaPods(引荐)

也能够直接在你的 swift 项目中 Podfile 文件中增加:

pod 'SwiftLint', :configuration => 'Debug'

一般来说只需求在 Debug 上装置就行了(无需带到线上),然后履行:

3、运用 Mint

命令行履行:

mint install realm/SwiftLint

运用办法

引荐运用 CocoaPods 装置 (我这里也用这种办法举例),这样多人开发的时候每个人无需再在电脑上装置一次,然后也能够很好的整合 SwiftLint 到 Xcode 系统中,从而能够使正告和过错显现到 Xcode 上。

翻开 Xcode 你的项目,点击主 Target,选择 Build Phases,点击加号增加一个新的“Run Script Phase”,然后增加以下代码即可:

你应该在 iOS 项目中运用 SwiftLint

${PODS_ROOT}/SwiftLint/swiftlint --fix
${PODS_ROOT}/SwiftLint/swiftlint lint

你应该在 iOS 项目中运用 SwiftLint

由于你已经在 Podfile 中增加了 SwiftLint, pod install 之后会装置在 ${PODS_ROOT}/SwiftLint/swiftlint 这个目录,所以能够直接这么履行。

这里涉及两个命令 –fix 用来自动纠正代码,lint 命令用来在 IDE 上显现正告或报错。

在 Xcode 15 中对 Build Settings 做了一些更改,因此,当你编译项目时,SwiftLint 会遇到与缺少文件权限相关的过错,解决办法是,翻开 Build Settings,搜索 enable_user_script,将对应的选项改为 No 就行了。

你应该在 iOS 项目中运用 SwiftLint

此刻当你编译项目时,swiftlint 会自动遍历你一切的代码,校验标准,然后依据标准来给出报错或许正告。

比方我的 AppDelegate 里的某个办法字符数超过了 120 个,就会给出一个正告,由于 SwiftLint 默许有一条规矩是单行代码不能超过 120 个字符:

你应该在 iOS 项目中运用 SwiftLint

规矩

跟着 SwiftLint 不断发展,现在已经有超过 200 条规矩了,你能够在 这个网站 找到规矩的更新列表和更多信息。

1、默许规矩

现在有 94 条规矩是默许敞开的,不需求独立装备,就包含常见的单行不能超过 120 字符、空格标准、换行标准等等。

2、Opt-In 规矩

Opt-In 规矩现在有 134 条,默许不敞开,假如想要敞开,需求通过装备文件来独自声明,其中包含一些可开可不开的标准,比方把 count > 0 换成 isEmpty、约束强制解包等等。

3、如安在代码中关闭某个规矩

有时候或许由于某些原因,不得不在特定的代码中关掉某个规矩,SwiftLint 也给出了相关的命令:

// swiftlint:disable <rule1> [<rule2> <rule3>...]

比方我想关掉单行 120 字符的规矩,能够在 AppDelegate 文件中写入:

// swiftlint:disable line_length

line_length 便是约束 120 字符的规矩名。

当 SwiftLint 读到这行注释时,就会开端在下一行代码中忽略 line_length 这个规矩,记得在需求敞开时用 enable 来敞开,比方我需求关掉 AppDelegate 这个文件一切代码的 line_length 规矩,则能够在榜首行写

// swiftlint:disable line_length

在最后一行写 enable 来重新敞开:

// 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 文件为:

disabled_rules:
  - line_length
opt_in_rules:
  - empty_count

然后再次运转项目,发现 line_length 的正告没有了。

当我运用 count == 0 来判空时,SwiftLint 给我了一个正告,这个便是 empty_count 规矩在起作用:

你应该在 iOS 项目中运用 SwiftLint

SwiftLint 还支撑一些更精细的装备,比方 line_length 默许 120 个字符,我觉得太少了,那么你能够在 .swiftlint.yml 文件中新增一行来改成 150 个:

opt_in_rules:
  - empty_count
line_length: 150

更多装备相关的内容能够到 SwiftLint 官方文档中查看

参考资料

[1]

SwiftLint 规矩列表: realm.github.io/SwiftLint/r…

[2]

SwiftLint 官方文档: github.com/realm/Swift…

这里每天共享一个 iOS 的新知识,快来重视我吧

本文同步自微信大众号 “iOS新知”,每天按时共享一个新知识,这里只是同步,想要及时学到就来重视我吧!