1 Swift 代码风格规范简介
首先要了解如下这三个文档:
-
Github 代码风格规范: star 4000+ (截至2017年4月)
暂命名为 github 规范.
-
Raywenderlich 代码风格规范: star 7000+ (截至2017年4月)
暂命名为 温德里奇规范.
-
苹果API设计原则(API Design Guidelines)
苹果这个设计原则是许多规范的根源, 需要深入了解.
写作本文时, swift刚发布到 3.1 版本. 流行的 Swift 代码风格规范也只更新到对应 3.1, 后续需要不断完善补充.
不过这些规范都是基于苹果的 API 设计原则 再进行总结给出的, 故需要首先了解苹果的 API 设计原则.
2 swift-lint插件的安装和使用
swift-lint 是针对 swift 的代码风格检查工具. 它可以内置到工程中, 也可以全局安装到系统. 具有使用简单, 配置灵活的特点. 下面就来介绍它的安装, 配置和使用方法.
swift-lint 插件Github地址.
由于全世界都在逐步过渡到 swift, 基于 OC 的代码风格检查工具不再引入, 新项目争取也不再使用 OC 作为主要开发语言, 后续新模块也将使用 Swift 进行开发.
2.1 通过命令行安装
通过命令行安装的话, 首先首先安装 homebrew. 之后在命令行运行:
brew install swiftlint
之后需要在工程根目录或子目录中添加 swift-lint 配置文件(见 2.3 节) .
如果是通过命令行方式安装, 则需要进入到工程目录, 然后再运行:
swiftlint # 当然也可以在工程添加 run script 脚本实现
2.2 通过pod方式安装和使用
推荐采用这个方式安装, 这样在多人协作的时候不用重复进行安装和配置, 直接执行 pod install
就可以使用了.
-
在 Podfile 中添加如下代码:
pod 'SwiftLint'
打开工程并找到对应 target 的 Build Phases:
添加一个 Run Script 脚本, 脚本内容为:
${PODS_ROOT}/SwiftLint/swiftlint
添加后如下图所示(实际使用时请修改进入的目录和选择是否使用 autocorrect 功能):
之后需要在工程根目录或子目录中添加 swift-lint 配置文件(见 2.3 节) .
至此就可以正常使用了, 每次编译工程的时候都会自动进行代码风格检查.
2.3 配置文件
虽然 swift-lint 不需要配置也可以正常使用(此时使用的是默认的规则), 但对于生产环境下的复杂场景, 就需要根据不同的任务目标来相应进行配置.
swift-lint 使用 .swiftlint.yml
文件进行配置, 并且可以在同一工程中不同文件夹下使用不同的配置文件, 这样可以达到对不同模块进行区别控制.
本文档提供的两个针对不同用途的配置文件.
适用于一般工程的配置文件:
# 要查看 swiftlint 的所有内置规则, 请在终端执行: swiftlint rules
disabled_rules: # 需要关闭的强制性规则
# - colon
# - comma
# - control_statement
- for_where
opt_in_rules: # 需要打开的可选规则
- empty_count
- missing_docs
- closure_end_indentation
- closure_spacing
- force_unwrapping
- implicitly_unwrapped_optional
- operator_usage_whitespace
- redundant_nil_coalescing
included: # 需要进行语法检查的文件夹列表, 每个文件夹都以 - 开头
- Sources # 演示
excluded: # 需要在语法检查时候排除掉的文件夹. 比如 Pod 或 Carthage 等第三方源代码文件夹.
- Carthage
- Pods
# 以下是规则参数配置:
force_cast: warning # implicitly
force_try:
severity: warning # explicitly
line_length: 120 # 单行字符个数限制
type_body_length: # 类型体行数限制
- 300 # warning
- 400 # error
function_body_length: 100 # 函数或方法的内容行数限制
function_parameter_count: 6 # 函数或方法的参数个数限制
file_length: # 文件行数限制
warning: 500
error: 1200
type_name: # 类型命名时字符个数限制
min_length: 2 # warning
max_length: # warning and error
warning: 40
error: 50
excluded: iPhone # 排除
identifier_name: # 标识符命名时字符个数限制
min_length: # only min_length
error: 4 # only error
excluded: # excluded via string array
- id
- URL
- GlobalAPIKey
reporter: "xcode" # reporter type (xcode, json, csv, checkstyle, junit, html, emoji)
适用于算法工程的配置文件:
cyclomatic_complexity: 12
file_length: 550
function_body_length: 80
function_parameter_count: 8
line_length: 150
type_body_length: 300
variable_name:
min_length:
error: 1
warning: 1
excluded:
- N
disabled_rules:
- valid_docs
custom_rules:
smiley_face:
name: "Smiley Face"
regex: "(\:\))"
match_kinds:
- comment
- string
message: "A closing parenthesis smiley :) creates a half-hearted smile, and thus is not preferred. Use :]"
severity: warning
上述配置文件在使用时需要结合实际规范做小范围修改(主要是包含文件夹等配置内容).
其他配置细节详见 swift-lint 插件的 ReadMe.