iOS編碼規(guī)范

常量

在常量的使用上呻畸,建議盡量使用類型常量碟贾,不要使用宏定義币喧,不如要定義一個常量轨域,推薦這樣寫:

static NSString * const STMProjectName = @"GCDFetchFeed"

而不是這樣寫:

#define STMProjectName @"GCDFetchFeed"

變量

1.變量名應(yīng)該可以明確體現(xiàn)出功能,最好再加上類型做后綴杀餐。這樣也就明確了每個變量都是做什么的干发,而不是把一個變量當(dāng)作不同的值用在不同的地方。
2.在使用之前史翘,需要先對變量做初始化枉长,并且初始化的地方離使用它的地方越近越好。
3.不要濫用全局變量琼讽,盡量少用它來傳遞值必峰,通過參數(shù)傳值可以減少功能模塊間的耦合。

比如钻蹬,下面這段代碼中吼蚁,當(dāng)名字為字符串時,就可以把字符串類型作為后綴加到變量名后面问欠。


let nameString = "Tom"
print("\(nameString)")

nameLabel.text = nameString

屬性

在 iOS 開發(fā)中肝匆,關(guān)于屬性的編碼規(guī)范,需要針對開發(fā)語言做區(qū)分:

  • Objective-C 里的屬性顺献,要盡量通過 get 方法來進(jìn)行懶加載术唬,以避免無用的內(nèi)存占用和多余的計算。
  • Swift 的計算屬性如果是只讀滚澜,可以省掉 get 子句。示例代碼如下:

var rectangleArea: Double {
  return long * wide
}

條件語句

在條件語句中嫁怀,需要考慮到條件語句中可能涉及的所有分支條件设捐,對于每個分支條件都需要考慮到,并進(jìn)行處理塘淑,減少或不使用默認(rèn)處理萝招。特別是使用 Switch 處理枚舉時,不要有 default 分支存捺。

在 iOS 開發(fā)中槐沼,你使用 Swift 語言編寫 Switch 語句時,如果不加 default 分支的話捌治,當(dāng)枚舉有新增值時岗钩,編譯器會提醒你增加分支處理。這樣肖油,就可以有效避免分支漏處理的情況兼吓。

另外,條件語句的嵌套分支不宜過多森枪,可以充分利用 Swift 中的 guard 語法视搏。比如审孽,這一段處理登錄的示例代碼:


if let userName = login.userNameOK {
    if let password = login.passwordOK {
        // 登錄處理
        ...
    } else {
        fatalError("login wrong")
    }
} else {
    fatalError("login wrong")
}

上面這段代碼表示的是,當(dāng)用戶名和密碼都沒有問題時再進(jìn)行登錄處理浑娜。那么佑力,我們使用 guard 語法時,可以改寫如下:


guard 
  let userName = login.userNameOK,
  let password = login.passwordOK,
  else {
    fatalError("login wrong")
}
// 登錄處理
...

可以看到筋遭,改寫后的代碼更易讀了打颤,異常處理都在一個區(qū)域,guard 語句真正起到了守衛(wèi)的職責(zé)宛畦。而且你一旦聲明了 guard瘸洛,編譯器就會強(qiáng)制你去處理異常,否則就會報錯次和。異常處理越完善反肋,代碼就會越健壯。所以踏施,條件語句的嵌套處理石蔗,你可以考慮使用 guard 語法。

循環(huán)語句

在循環(huán)語句中畅形,我們應(yīng)該盡量少地使用 continue 和 break养距,同樣可以使用 guard 語法來解決這個問題。解決方法是:所有需要 continue 和 break 的地方統(tǒng)一使用 guard 去處理日熬,將所有異常都放到一處棍厌。這樣做的好處是,在維護(hù)的時候方便邏輯閱讀竖席,使得代碼更加易讀和易于理解耘纱。

函數(shù)

對于函數(shù)來說,體積不宜過大毕荐,最好控制在百行代碼以內(nèi)束析。如果函數(shù)內(nèi)部邏輯多,我們可以將復(fù)雜邏輯分解成多個小邏輯憎亚,并將每個小邏輯提取出來作為一個單獨的函數(shù)员寇。每個函數(shù)處理最小單位的邏輯,然后一層一層往上組合第美。這樣蝶锋,我們就可以通過函數(shù)名明確那段邏輯處理的目的,提高代碼的可讀性什往。

拆分成多個邏輯簡單的函數(shù)后牲览,我們需要注意的是,要對函數(shù)的入?yún)⑦M(jìn)行驗證,guard 語法同樣適用于檢查入?yún)⒌谙住1热缦旅娴倪@個函數(shù):


func saveRSS(rss: RSS?, store: Store?) {
    guard let rss = rss else {
        return 
    }
    guard let store = store else {
        return
    }

    // 保存 RSS
    return
}

如上面代碼所示贡必,通過 guard 語法檢查入?yún)?rss 和 store 是否異常,提高函數(shù)的健壯性會來得更容易些庸毫。

另外仔拟,函數(shù)內(nèi)盡量避免使用全局變量來傳遞數(shù)據(jù),使用參數(shù)或者局部變量傳遞數(shù)據(jù)能夠減少函數(shù)對外部的依賴飒赃,減少耦合利花,提高函數(shù)的獨立性,提高單元測試的準(zhǔn)確性载佳。

在 Objective-C 中炒事,類的頭文件應(yīng)該盡可能少地引入其他類的頭文件。你可以通過 class 關(guān)鍵字來聲明蔫慧,然后在實現(xiàn)文件里引入需要的其他類的頭文件挠乳。

對于繼承和遵循協(xié)議的情況,無法避免引入其他類的頭文件姑躲,所以你在代碼設(shè)計時還是要盡量減少繼承睡扬,特別是繼承關(guān)系太多時不利于代碼的維護(hù)和修改,比如說修改父類時還需要考慮對所有子類的影響黍析,如果評估不全卖怜,影響就難以控制。

分類

在寫分類時阐枣,分類里增加的方法名要盡量加上前綴马靠,而如果是系統(tǒng)自帶類的分類的話,方法名就一定要加上前綴蔼两,來避免方法名重復(fù)的問題虑粥。

分類的作用如其名,就是對類做分類用的宪哩,所以我建議你,能夠把一個類里的公共方法放到不同的分類里第晰,便于管理維護(hù)锁孟。分類特別適合多人負(fù)責(zé)同一個類時,根據(jù)不同分類來進(jìn)行各自不同功能的代碼維護(hù)茁瘦。

推薦:

Spotify 的 Objective-C 編碼規(guī)范:https://github.com/spotify/ios-style
紐約時報的 Objective-C 的編碼規(guī)范:https://github.com/NYTimes/objective-c-style-guide
Raywenderlich 的 Objective-C 編碼規(guī)范:https://github.com/raywenderlich/objective-c-style-guide
Raywenderlich 的 Swift 編碼規(guī)范:https://github.com/raywenderlich/swift-style-guide

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末品抽,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子甜熔,更是在濱河造成了極大的恐慌圆恤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,194評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腔稀,死亡現(xiàn)場離奇詭異盆昙,居然都是意外死亡羽历,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,058評論 2 385
  • 文/潘曉璐 我一進(jìn)店門淡喜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來秕磷,“玉大人,你說我怎么就攤上這事炼团∨煜” “怎么了?”我有些...
    開封第一講書人閱讀 156,780評論 0 346
  • 文/不壞的土叔 我叫張陵瘟芝,是天一觀的道長易桃。 經(jīng)常有香客問我,道長锌俱,這世上最難降的妖魔是什么晤郑? 我笑而不...
    開封第一講書人閱讀 56,388評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮嚼鹉,結(jié)果婚禮上贩汉,老公的妹妹穿的比我還像新娘。我一直安慰自己锚赤,他們只是感情好匹舞,可當(dāng)我...
    茶點故事閱讀 65,430評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著线脚,像睡著了一般赐稽。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浑侥,一...
    開封第一講書人閱讀 49,764評論 1 290
  • 那天姊舵,我揣著相機(jī)與錄音,去河邊找鬼寓落。 笑死括丁,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伶选。 我是一名探鬼主播史飞,決...
    沈念sama閱讀 38,907評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼仰税!你這毒婦竟也來了构资?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,679評論 0 266
  • 序言:老撾萬榮一對情侶失蹤陨簇,失蹤者是張志新(化名)和其女友劉穎吐绵,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,122評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡己单,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,459評論 2 325
  • 正文 我和宋清朗相戀三年唉窃,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片荷鼠。...
    茶點故事閱讀 38,605評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡句携,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出允乐,到底是詐尸還是另有隱情矮嫉,我是刑警寧澤,帶...
    沈念sama閱讀 34,270評論 4 329
  • 正文 年R本政府宣布牍疏,位于F島的核電站蠢笋,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏鳞陨。R本人自食惡果不足惜昨寞,卻給世界環(huán)境...
    茶點故事閱讀 39,867評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望厦滤。 院中可真熱鬧援岩,春花似錦、人聲如沸掏导。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,734評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽趟咆。三九已至添瓷,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間值纱,已是汗流浹背鳞贷。 一陣腳步聲響...
    開封第一講書人閱讀 31,961評論 1 265
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留虐唠,地道東北人搀愧。 一個月前我還...
    沈念sama閱讀 46,297評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像疆偿,于是被迫代替她去往敵國和親咱筛。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,472評論 2 348

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

  • 約定 在我看來翁脆,開發(fā)規(guī)范像是一條可供參考的標(biāo)準(zhǔn)線。不同開發(fā)者可以根據(jù)這條標(biāo)準(zhǔn)線來規(guī)范自己的開發(fā)行為鼻种,尤其是在大的項...
    xxzsxxzs閱讀 617評論 1 0
  • 本文檔旨在總結(jié)出一份通用的編碼規(guī)范反番,歡迎隨時探討補(bǔ)充。 喜歡我的可以關(guān)注收藏我的個人博客:Ro.bber 代碼格式...
    Ro_bber閱讀 869評論 0 1
  • 注釋規(guī)范 文件頭注釋 文件頭注釋采用如下格式,該注釋由xcode自動生成罢缸。如果你對其他人的原始代碼作出重大的修改篙贸,...
    yangzming閱讀 725評論 0 1
  • iOS編碼規(guī)范 GitHub 地址https://github.com/CodeOuyang/iOS-note.g...
    ouyangke閱讀 449評論 0 1
  • 在開發(fā)過程中,我們不僅要去看別人的代碼枫疆,也要讓別人看我們的代碼爵川。每個人的Objective-C編碼風(fēng)格都不一樣,這...
    叫我GuanRen閱讀 175評論 0 1