SwiftLint - swift代码规范工具

目的:

  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配置文件的时候,如果在系统扫描的过程中发现了一个新的配置文件,那么子目录下的规则就会改为新的配置规则。

  总的来说,swiftlint对于代码规范管理是利远大于弊的,只要在前期需要一些时间建立一个规范体系.在后期由于代码整体的规范性,能利于项目的维护,以及可以节省代码Review的时间.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342

推荐阅读更多精彩内容