目的:
iOS APP在下一个版本会用swift开发,在多人开发中,即使有官网的规范模板.但每个人的代码风格和规范难以做到完全一致,对后期项目维护会增加一定的困难,这里主要是对一个规范代码风格工具swiftlint使用的一个评估.
介绍:
SwiftLint是Realm公司开发的一个插件,专门用于管理Swift代码的规范,能够对原有的代码自动格式化,在 Xcode 中执行编译时,SwiftLint 会自动运行检查,不符合规范的代码会通过警告或者报错的形式指示出来,并且拥有丰富的配置项,可以进行大量的自定义规范操作,是一个很方便的工具.
安装使用:
安装:
1:可以使用homebrew进行全局安装:
需要在已经安装了homebrew 前提下:
打开终端输入:
brew install SwiftLint
2:使用cocoaPods安装:
pod ’SwiftLint’,这个方式可以安装不同版本的SwiftLint但是只能针对单个项目.
3:SwiftLint支持pkg安装包安装.
使用:
安装完成后,需要在Xcode中的Build Phases新建一个 Run Script Phase 配置项添加脚本,
1:全局安装添加脚本
if which swiftlint >/dev/null; then
swiftlint
else
echo "warning: SwiftLint not installed, download from https://github.com/realm/SwiftLint"
fi
2:CocoaPods安装添加脚本
"${PODS_ROOT}/SwiftLint/swiftlint"
这个脚本在安装了swiftlint后每次运行都会执行,如果没有安装swiftlint,会警告异常或者报错.
3:.swiftlint.yml:
这是一个配置文件,可以通过这个配置文件来自定义规则或者修改默认规则.
这里是自用的一个.swiftlint.yml 配置内容
excluded: # 执行 linting 时忽略的路径。 优先级比 `included` 更高。
- Carthage
- Pods
- Source/ExcludedFolder
- Source/ExcludedFile.swift
disabled_rules:# 执行时排除掉的规则
- identifier_name # 命名规则必须按照驼峰原则,与后台传的Json字段命名冲突,建议排除掉
- trailing_whitespace # 每一个空行不能有空格,会与Xcode换行后自动对齐生成的空格冲突,建议排除掉
- vertical_whitespace#垂直方向上的空格行,限制为一行(注释除外)
- trailing_newline#末尾空行
- unused_closure_parameter#函数的参数必须被使用
- class_delegate_protocol#delegate protocol 应该被设定为 class-only,才能被弱引用
- weak_delegate#代理要设置为弱引用和上面的
- control_statement#if while 等判断条件不要用括号 括起来
- leading_whitespace#文件末尾不应该存在空格符
- statement_position#else and catch 应该与 } 在同一行,以空格间隔
- orphaned_doc_comment#注释要写在声明中
- type_body_length#类型体长度。类型体长度不应该跨越太多行,超过200行给warning,超过350行给error,可自定义
- notification_center_detachment#移除通知要在 'deinit'中
- implicit_getter# read-only参数不应该有getter方法
- multiple_closures_with_trailing_closure#当函数有多个闭包时, 不建议使用尾随闭包语法
- trailing_comma# 数组最后一个元素后面有逗号
- shorthand_operator# 使用+= , -=, *=, /= 代替 a = a + 1
- file_length#文件长度
- unneeded_break_in_switch# 在switch-case语句中, 有方法调用或操作时,避免使用break语句
- large_tuple#元祖成员
- redundant_string_enum_value#在定义字符串枚举的时候, 当字符串枚举值等于枚举名称时,可以不用赋值
- implicitly_unwrapped_optional#避免隐式解析可选类型的使用
- syntactic_sugar#语法糖[Int] 代替Array
- line_length# 行的字符长度
- function_parameter_count#函数参数个数 默认5warning 8error
- cyclomatic_complexity#代码复杂度,默认为10,循环复杂度。函数体的复杂度的限制,这个属性主要约束条件句、循环句中的循环嵌套问题, 当嵌套太多的循环时,则会触发swiftlint中的warning和error,当达到10个循环嵌套时就会报warning,达到20个循环嵌套时就会报error
- function_body_length#函数体长度 默认超过40行warning
- closure_parameter_position
- unused_optional_binding
opt_in_rules: # some rules are only opt-in
- opening_brace# 右括号之前应有一个空格,并与声明在同一行
- unused_import# import 的文件要被使用 All imported modules should be required to make the file compile.
#unused_capture_list: error #闭包中没有被使用的参数应该删除
#redundant_void_return: error #在不必要的时候, 不需要写 ->() and -> Void
operator_whitespace: error #当定义空格操作符的时候,被定义的名字或类型两边应该各有一个单行空格操作符
closure_parameter_position: error#闭包参数位置, 闭包参数应该和大括号左边在同一行
mark: error# //MARK: -
#redundant_optional_initialization: error # 默认值赋值为nil
return_arrow_whitespace: error# -> 前后要有空格
#unused_optional_binding: error #在使用if判断某变量是否为nil的时候, 不建议使用下划线(_)
force_unwrapping: error#避免强制解包
force_cast: warning # 类型判断,这里表示强解类型警告 as! Int
force_try: warning # 对会抛出异常(throws)的方法,不建议try,强解
trailing_semicolon: error#末尾跟逗号
legacy_constructor: error #使用 swift 提供的 struct 构造函数, 避免使用 遗留的构造函数 比如 CGPointMake(10, 10)
no_space_in_method_call: error#不要在方法名称和括号之间添加空格
empty_count: error #建议使用isEmpty判断,而不是使用count==0判断
opening_brace: error #大括号之前应该有一个空格,且与声明在同一行
statement_position: error #这里主要指的是 else 和 catch 前面要加一个空格, 也不能大于1个空格
colon: error #冒号右侧 有且只有一个空格
comma: error #逗号 [a, b, c, d] 后面必须有一个空格, 前面不要空格
prohibited_interface_builder: error#禁止用interface Builder 创建视图
protocol_property_accessors_order: error#在协议中声明属性 要按顺序先写 get set方法
type_name: #类型名应该只包含字母数字字符, 并且以大写字母开头,长度在3-40个字符
min_length:4# 只是警告
max_length:# 警告和错误
warning:60
error:80
excluded:#排除 不某些名字不受该规则控制
#cyclomatic_complexity:
# warning: 15
# error: 100 #代码复杂度,默认为10,循环复杂度。函数体的复杂度的限制,这个属性主要约束条件句、循环句中的循环嵌套问题, 当嵌套太多的循环时,则会触发swiftlint中的warning和error,当达到10个循环嵌套时就会报warning,达到20个循环嵌套时就会报error
#line_length: # 单行代码长度,默认error 120
# warning: 300
# error: 500
#file_length: # 文件长度
# warning: 1000
# error: 2000
#function_body_length: # 函数体长度
# warning: 100
# error: 200
#large_tuple : #元组成员
# warning: 6
# error: 8
可去官方自定查找对应属性说明:
(GitHub 链接:https://github.com/realm/SwiftLint)
4.swiftlint.yml配置文件的嵌套
在我们使用.swift.yml配置文件的时候,如果在系统扫描的过程中发现了一个新的配置文件,那么子目录下的规则就会改为新的配置规则。