SwiftLint实用小技巧

    随着Swift的不断更新与优化,iOSer逐渐向Swift这艘大船靠拢了。很多OCer(比如在下),也开始尝试从OC转向Swift开发了。OC和Swift的变化并不是太大,学好了基础的Swift语法,开始用OC的想法去开发Swift项目好像也没什么大问题。直到有一天,朋友推荐了一个Swift开发规范框架SwiftLint,让集成到项目中看看代码规范情况,从此一切都变了😂。(如何集成到项目中就不赘述了,百度就可以了)。

       当我信心满满的command + B 的时候,没有任何问题。两秒钟过去,小demo就编译玩了。好像也没啥啊。看来我的代码还是满规范的😊。嗯?。。。。等等,满屏幕的提醒是咋回事我才一个小模块的业务,150+的提醒😂?

头大啊,咋整呢

    不过,对于程序员来说,探索未知的事情一直是我们的爱好。不要慌,咱慢慢来😀,咱一条一条的看,一条一条的解决。最终肯定会有个好的结果的。下次同样的提醒也能避免了,对吧😕。好,废话不多说(好像说的挺多的😂),走起。

    首先,从出现最多的提醒来开刀吧,枪打出头鸟,谁教你最活跃呢😝。(opening_brace)

OC这样写没问题啊,Swift好像也没啥问题啊。🤔

从他的提示来看,是间隔的问题。把else 左右两边都空格一个文字的距离,再编译一下。果然没问题了😀。剩下的相同的问题,咱也一起整一下,一通折腾之后,蹭蹭蹭,提醒少80。虽然还有一些,但是解决了一半,还是蛮开心的,继续加油。总的来说:Opening Brace Spacing Violation: Opening braces should be preceded by a single space and on the same line as the declaration.出现这个提醒,一般就是你的符号周围需要间隔开。这样更符合swift的开发规范。

    第二个问题就比较奇怪了,我只是拖拽xib约束到cell,为什么你也给我整一个呢😳?

😳😳😳?官方的操作还不对?

    仔细一看提示说 ,推荐我们使用private来修饰我们的IBOutlets以防止内存泄漏。好吧,听你的,我用private。用private就会造成一个问题,你在控制器中就无法直接对IBOutlt对象赋值了,所以,将数据源传进来复制渲染UI吧。果然,这样一改,提醒就没了。perfect!总的来说:Private Outlets Violation: IBOutlets should be private to avoid leaking UIKit to higher layers.(privat...) 出现这个提醒,一般就是你的IBOutlet需要用private修饰。

    第三个问题初看好像也没啥不妥,正常定义一个闭包嘛,又有啥幺蛾子呢🤔?

看英文应该是逗号前后都不能有间隔哦😯

好吧,你是大佬,咱听你的,咱试试😜。果然,提示没有了。又搞定一个。总的来说:Comma Spacing Violation: There should be no space before and one after any comma.(comma)出现这个提醒,一般就是你的逗号周围没有间隔,代码阅读性需要提升,SwiftLint提醒你加个空格,是代码更容易阅读(不知道为啥逗号前面不能有间隔,后面必须有间隔才不会提醒😢)。

    第四个就看起来很明显了,Unused Closure Parameter Violation: Unused parameter "error" in a closure should be replaced with _. 应该就是我们的这个error闭包我们定义了,但是没有使用它。

那我们就像敷衍的用一下error吧 😀

在我们的敷衍下,这个提醒也没了。总的来说:,Unused Closure Parameter Violation: Unused parameter "XXX" in a closure should be replaced with _. 出现这个提醒,一般就是你定义一个闭包,但是你没有使用它,你也可以像我一样敷衍一下,或者换种姿势,不对,方式。

这样写也是没问题的😀

如果有个对象是别人强制给你的,但是你可以不用,你就把他写成 _ 吧。“_”是代表函数调用时,可以忽略参数名称。好的,这个问题也解决了,咱继续下一个问题。

    接下来的问题可能就简单点了,找空格。空格问题以前一直都没怎么注意,这不,SwiftLint帮我们全找出来了。既然他都找出来了,我们就去看看并纠正一下吧

红线标记的地方存在空格问题。

try前面多了空格,from后面少了空格。咱都处理一下。Bingo,这个提醒也没了。所以,以后看到这个提醒:Operator Usage Whitespace Violation: Operators should be surrounded by a single whitespace when they are being used.(operator_usage_whitespace) 。你需要检查一下你的代码里面是否多了空格或者少了空格,把他补上或者删掉就好了😀

       第五个问题, 作为Ocer,用;结尾不是必须的嘛🤔。到了Swift自然免不了手滑也把他加上了。Swift已经不需要我们来写这个了,当然你写了也不会报错,只会提示你:Trailing Semicolon Violation: Lines should not have trailing semicolons.(trailing_semicolon) 当你下次看到这个,看看末尾是不是有;,把他去掉即可。

        第六个问题,使用Swift之后我们不再只能使用class定义model了,struct也能创建model了。如果只是值类型的model,我们使用struct可能会更方便。好,咱就用一下。当我们滑溜的写完,提醒也来了。

这个是分号前面不能有空格。

总的来说:下次看到这个提醒 Colon Violation: Colons should be next to the identifier when specifying a type and next to the key in dictionary literals.(colon) 看看是不是你的引号前面空格了,把空格去掉就好了,后面没有空格也会有这个问题的,加上空格就好了。使用JsonExpert导出的model,普遍存在这个问题,大家稍微改一下就好了😀。

    第七个问题,是Swift的特性造成的,Swift的switch默认在case技术的时候帮我们添加了break,我们不需要再手动添加break了。

Swift默认添加了break

所以,当我们看到 Unneeded Break in Switch Violation: Avoid using unneeded break statements.(unneeded_break_in_switch) 就说明我们添加了不必要的break,我们去掉它就好了。

    折腾了这么久,不知不觉中提醒已经消除一大部分了。

从最开始的150+到11还是蛮爽的 

       既然提醒还有,那咱就继续吧。看看还有哪些在等着我们。

    第八个问题:for where 的使用。以前遍历经常使用  for in ,比如下面这种

把where条件增加到 for语句后面

原来是Swift推荐我们使用 for in where来替代for in 里面再添加条件判断的,以前我们可能会在for in里面添加多种条件判断,但是代码层层嵌套,阅读和使用都更方便。当然filter函数也能达到目的,大家也可以自己尝试一下。所以,当大家看到 For Where Violation: `where` clauses are preferred over a single `if` inside a `for`.(for_where) 。这个是提醒大家遍历的时候可以把约束条件放在for in  后面

使用filter来添加约束条件也OK的

    第九个问题:Trailing Comma Violation: Collection literals should not have trailing commas.(trailing_comma)。这个从字面的意思来看应该是集合不应该有尾随逗号,不应该有,那我们去掉就好了。

    第十个问题:这也是一个OC惯性思维造成的问题。一般我们创建对象都是通过alloc init的方式去创建,swift帮我们省了一步,我们不用再去写alloc了。所以就有了如下的操作

创建一个空的collectionView也有错吗😭

仔细一看也没啥问题,后来朋友告诉我,现在不需要显式创建对象了。直接去掉.init就好了。果然,去掉init就好了

perfect

以后我们在创建的对象可以不用调用init,直接隐式创建就好了。所以当你遇到 Explicit Init Violation: Explicitly calling .init()should be avoided.(explicit_init) ,不妨检查一下你创建对象的方式,然后按照我的方式去解决它😀。

    第十一个问题:也是Swift语言和OC的差异问题。

我们在判断条件的时候不需要写多余的括号的

所以,当看到 Control Statement Violation: `if`,`for`,`guard`,`switch`,`while`,and `catch` statements shouldn't unnecessarily wrap their conditionals or arguments in parentheses.(control_statement) 你看看你的条件判断语句是不是写了多余的 () ,去掉它就好了。

       以上就是这次demo遇到的提醒和解决办法。希望能给看到文章的你有些帮助😀。

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

推荐阅读更多精彩内容

  • Introduction This document gives coding conventions for t...
    wuutiing阅读 4,521评论 0 9
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi阅读 7,279评论 0 10
  • 原文 原文下载之后的格式略有点不友好,利用简述的markdown,编辑一下.版权归原作者 PEP Index > ...
    大飞哥阅读 2,464评论 0 0
  • 一只与鸡生活在一起的鹰,因为所处环境,所以它认为自己是一只鸡,而它被扔下悬崖时,随着环境改变,它扑棱这翅膀...
    幽若陌浅阅读 226评论 0 2
  • 梦想及进度 :知道了区分目标和手段,这样就更能避免盲目的行为 年目标及进度:通过学习触摸屏更了解嵌入式开发流程 月...
    心_声阅读 134评论 0 0