SwiftLint實用小技巧

????隨著Swift的不斷更新與優(yōu)化浓瞪,iOSer逐漸向Swift這艘大船靠攏了煎娇。很多OCer(比如在下),也開始嘗試從OC轉(zhuǎn)向Swift開發(fā)了丹鸿。OC和Swift的變化并不是太大越走,學(xué)好了基礎(chǔ)的Swift語法,開始用OC的想法去開發(fā)Swift項目好像也沒什么大問題靠欢。直到有一天廊敌,朋友推薦了一個Swift開發(fā)規(guī)范框架SwiftLint,讓集成到項目中看看代碼規(guī)范情況门怪,從此一切都變了??骡澈。(如何集成到項目中就不贅述了,百度就可以了)掷空。

? ? ? ?當(dāng)我信心滿滿的command + B 的時候肋殴,沒有任何問題。兩秒鐘過去坦弟,小demo就編譯玩了疼电。好像也沒啥啊〖跏茫看來我的代碼還是滿規(guī)范的??蔽豺。嗯?拧粪。修陡。沧侥。。等等魄鸦,滿屏幕的提醒是咋回事我才一個小模塊的業(yè)務(wù)宴杀,150+的提醒???

頭大啊拾因,咋整呢

? ? 不過旺罢,對于程序員來說,探索未知的事情一直是我們的愛好绢记。不要慌扁达,咱慢慢來??,咱一條一條的看,一條一條的解決蠢熄。最終肯定會有個好的結(jié)果的跪解。下次同樣的提醒也能避免了,對吧??签孔。好叉讥,廢話不多說(好像說的挺多的??),走起饥追。

? ? 首先图仓,從出現(xiàn)最多的提醒來開刀吧,槍打出頭鳥但绕,誰教你最活躍呢??透绩。(opening_brace)

OC這樣寫沒問題啊,Swift好像也沒啥問題啊壁熄。??

從他的提示來看,是間隔的問題碳竟。把else 左右兩邊都空格一個文字的距離草丧,再編譯一下。果然沒問題了??莹桅。剩下的相同的問題昌执,咱也一起整一下,一通折騰之后诈泼,蹭蹭蹭懂拾,提醒少80。雖然還有一些铐达,但是解決了一半岖赋,還是蠻開心的,繼續(xù)加油瓮孙√贫希總的來說:Opening Brace Spacing Violation: Opening braces should be preceded by a single space and on the same line as the declaration.出現(xiàn)這個提醒选脊,一般就是你的符號周圍需要間隔開。這樣更符合swift的開發(fā)規(guī)范脸甘。

? ? 第二個問題就比較奇怪了恳啥,我只是拖拽xib約束到cell,為什么你也給我整一個呢??丹诀?

??????钝的?官方的操作還不對?

????仔細(xì)一看提示說 铆遭,推薦我們使用private來修飾我們的IBOutlets以防止內(nèi)存泄漏硝桩。好吧,聽你的疚脐,我用private亿柑。用private就會造成一個問題,你在控制器中就無法直接對IBOutlt對象賦值了棍弄,所以望薄,將數(shù)據(jù)源傳進(jìn)來復(fù)制渲染UI吧。果然呼畸,這樣一改痕支,提醒就沒了。perfect蛮原!總的來說:Private Outlets Violation: IBOutlets should be private to avoid leaking UIKit to higher layers.(privat...)?出現(xiàn)這個提醒卧须,一般就是你的IBOutlet需要用private修飾。

????第三個問題初看好像也沒啥不妥儒陨,正常定義一個閉包嘛花嘶,又有啥幺蛾子呢???

看英文應(yīng)該是逗號前后都不能有間隔哦??

好吧蹦漠,你是大佬椭员,咱聽你的,咱試試??笛园。果然隘击,提示沒有了。又搞定一個研铆÷裢總的來說:Comma Spacing Violation: There should be no space before and one after any comma.(comma)出現(xiàn)這個提醒,一般就是你的逗號周圍沒有間隔棵红,代碼閱讀性需要提升凶赁,SwiftLint提醒你加個空格,是代碼更容易閱讀(不知道為啥逗號前面不能有間隔,后面必須有間隔才不會提醒??)哟冬。

? ? 第四個就看起來很明顯了楼熄,Unused Closure Parameter Violation: Unused parameter "error" in a closure should be replaced with _. 應(yīng)該就是我們的這個error閉包我們定義了,但是沒有使用它浩峡。

那我們就像敷衍的用一下error吧 ??

在我們的敷衍下可岂,這個提醒也沒了『苍郑總的來說:缕粹,Unused Closure Parameter Violation: Unused parameter "XXX" in a closure should be replaced with _.?出現(xiàn)這個提醒,一般就是你定義一個閉包纸淮,但是你沒有使用它平斩,你也可以像我一樣敷衍一下,或者換種姿勢咽块,不對绘面,方式。

這樣寫也是沒問題的??

如果有個對象是別人強制給你的侈沪,但是你可以不用揭璃,你就把他寫成 _ 吧⊥ぷ铮“_”是代表函數(shù)調(diào)用時瘦馍,可以忽略參數(shù)名稱。好的应役,這個問題也解決了情组,咱繼續(xù)下一個問題。

? ? 接下來的問題可能就簡單點了箩祥,找空格院崇。空格問題以前一直都沒怎么注意袍祖,這不底瓣,SwiftLint幫我們?nèi)页鰜砹恕<热凰颊页鰜砹嗣し海覀兙腿タ纯床⒓m正一下吧

紅線標(biāo)記的地方存在空格問題。

try前面多了空格键耕,from后面少了空格寺滚。咱都處理一下。Bingo屈雄,這個提醒也沒了村视。所以,以后看到這個提醒:Operator Usage Whitespace Violation: Operators should be surrounded by a single whitespace when they are being used.(operator_usage_whitespace) 酒奶。你需要檢查一下你的代碼里面是否多了空格或者少了空格蚁孔,把他補上或者刪掉就好了??

? ?????第五個問題奶赔, 作為Ocer,用杠氢;結(jié)尾不是必須的嘛??站刑。到了Swift自然免不了手滑也把他加上了。Swift已經(jīng)不需要我們來寫這個了鼻百,當(dāng)然你寫了也不會報錯绞旅,只會提示你:Trailing Semicolon Violation: Lines should not have trailing semicolons.(trailing_semicolon) 當(dāng)你下次看到這個,看看末尾是不是有温艇;因悲,把他去掉即可。

? ? ????第六個問題勺爱,使用Swift之后我們不再只能使用class定義model了晃琳,struct也能創(chuàng)建model了。如果只是值類型的model琐鲁,我們使用struct可能會更方便卫旱。好,咱就用一下绣否。當(dāng)我們滑溜的寫完誊涯,提醒也來了。

這個是分號前面不能有空格蒜撮。

總的來說:下次看到這個提醒?Colon Violation: Colons should be next to the identifier when specifying a type and next to the key in dictionary literals.(colon) 看看是不是你的引號前面空格了暴构,把空格去掉就好了,后面沒有空格也會有這個問題的,加上空格就好了段磨。使用JsonExpert導(dǎo)出的model取逾,普遍存在這個問題,大家稍微改一下就好了??苹支。

? ? 第七個問題砾隅,是Swift的特性造成的,Swift的switch默認(rèn)在case技術(shù)的時候幫我們添加了break债蜜,我們不需要再手動添加break了晴埂。

Swift默認(rèn)添加了break

所以,當(dāng)我們看到?Unneeded Break in Switch Violation: Avoid using unneeded break statements.(unneeded_break_in_switch) 就說明我們添加了不必要的break寻定,我們?nèi)サ羲秃昧恕?/p>

? ? 折騰了這么久儒洛,不知不覺中提醒已經(jīng)消除一大部分了。

從最開始的150+到11還是蠻爽的?

? ? ? ?既然提醒還有狼速,那咱就繼續(xù)吧琅锻。看看還有哪些在等著我們。

? ? 第八個問題:for where 的使用恼蓬。以前遍歷經(jīng)常使用? for in 惊完,比如下面這種

把where條件增加到 for語句后面

原來是Swift推薦我們使用 for in where來替代for in 里面再添加條件判斷的,以前我們可能會在for in里面添加多種條件判斷处硬,但是代碼層層嵌套小槐,閱讀和使用都更方便。當(dāng)然filter函數(shù)也能達(dá)到目的郁油,大家也可以自己嘗試一下本股。所以,當(dāng)大家看到?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)拄显。這個從字面的意思來看應(yīng)該是集合不應(yīng)該有尾隨逗號,不應(yīng)該有案站,那我們?nèi)サ艟秃昧恕?/p>

? ? 第十個問題:這也是一個OC慣性思維造成的問題躬审。一般我們創(chuàng)建對象都是通過alloc init的方式去創(chuàng)建,swift幫我們省了一步蟆盐,我們不用再去寫alloc了承边。所以就有了如下的操作

創(chuàng)建一個空的collectionView也有錯嗎??

仔細(xì)一看也沒啥問題,后來朋友告訴我石挂,現(xiàn)在不需要顯式創(chuàng)建對象了博助。直接去掉.init就好了。果然痹愚,去掉init就好了

perfect

以后我們在創(chuàng)建的對象可以不用調(diào)用init富岳,直接隱式創(chuàng)建就好了。所以當(dāng)你遇到?Explicit Init Violation: Explicitly calling .init()should be avoided.(explicit_init) ,不妨檢查一下你創(chuàng)建對象的方式,然后按照我的方式去解決它??。

? ? 第十一個問題:也是Swift語言和OC的差異問題刘陶。

我們在判斷條件的時候不需要寫多余的括號的

所以,當(dāng)看到 Control Statement Violation: `if`,`for`,`guard`,`switch`,`while`,and `catch` statements shouldn't unnecessarily wrap their conditionals or arguments in parentheses.(control_statement) 你看看你的條件判斷語句是不是寫了多余的 () 萝喘,去掉它就好了。

? ? ? ?以上就是這次demo遇到的提醒和解決辦法琼懊。希望能給看到文章的你有些幫助??阁簸。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市哼丈,隨后出現(xiàn)的幾起案子启妹,更是在濱河造成了極大的恐慌,老刑警劉巖削祈,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件翅溺,死亡現(xiàn)場離奇詭異,居然都是意外死亡髓抑,警方通過查閱死者的電腦和手機咙崎,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來吨拍,“玉大人褪猛,你說我怎么就攤上這事「危” “怎么了伊滋?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長队秩。 經(jīng)常有香客問我笑旺,道長,這世上最難降的妖魔是什么馍资? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任筒主,我火速辦了婚禮,結(jié)果婚禮上鸟蟹,老公的妹妹穿的比我還像新娘乌妙。我一直安慰自己,他們只是感情好建钥,可當(dāng)我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布藤韵。 她就那樣靜靜地躺著,像睡著了一般熊经。 火紅的嫁衣襯著肌膚如雪泽艘。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天奈搜,我揣著相機與錄音悉盆,去河邊找鬼。 笑死馋吗,一個胖子當(dāng)著我的面吹牛焕盟,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播宏粤,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼脚翘,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了绍哎?” 一聲冷哼從身側(cè)響起来农,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎崇堰,沒想到半個月后沃于,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涩咖,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年繁莹,在試婚紗的時候發(fā)現(xiàn)自己被綠了檩互。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡咨演,死狀恐怖闸昨,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情薄风,我是刑警寧澤饵较,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站遭赂,受9級特大地震影響循诉,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜撇他,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一打洼、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧逆粹,春花似錦募疮、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蹋绽,卻和暖如春芭毙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背卸耘。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工退敦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人蚣抗。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓侈百,卻偏偏與公主長得像,于是被迫代替她去往敵國和親翰铡。 傳聞我的和親對象是個殘疾皇子钝域,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Introduction This document gives coding conventions for t...
    wuutiing閱讀 4,538評論 0 9
  • rljs by sennchi Timeline of History Part One The Cognitiv...
    sennchi閱讀 7,309評論 0 10
  • 原文 原文下載之后的格式略有點不友好,利用簡述的markdown,編輯一下.版權(quán)歸原作者 PEP Index > ...
    大飛哥閱讀 2,474評論 0 0
  • 一只與雞生活在一起的鷹例证,因為所處環(huán)境,所以它認(rèn)為自己是一只雞迷捧,而它被扔下懸崖時织咧,隨著環(huán)境改變胀葱,它撲棱這翅膀...
    幽若陌淺閱讀 226評論 0 2
  • 夢想及進(jìn)度 :知道了區(qū)分目標(biāo)和手段,這樣就更能避免盲目的行為 年目標(biāo)及進(jìn)度:通過學(xué)習(xí)觸摸屏更了解嵌入式開發(fā)流程 月...
    心_聲閱讀 137評論 0 0