Swift4.0編碼規(guī)范

swift.png

這篇文章是基于SwiftLint總結(jié)的Swift4.0編碼規(guī)范烹玉。這個(gè)規(guī)范還在不斷的擴(kuò)充中驰怎,我挑了其中我認(rèn)為需要注意的幾點(diǎn),做了以下記錄二打。因?yàn)槭且?guī)范县忌,不存對(duì)與錯(cuò),只存在是否合適继效,是否有利于別人閱讀咱們的代碼症杏。另外為了方便說(shuō)明每條規(guī)則,我在規(guī)則下面都加了幾條推薦的寫(xiě)法和不推薦的寫(xiě)法瑞信。

命名規(guī)范

1.標(biāo)識(shí)符名稱(chēng)應(yīng)該只包含字母數(shù)字字符厉颤,以小寫(xiě)字符開(kāi)頭,或者只包含大寫(xiě)字母凡简。在上述情況下逼友,變量名可以在聲明靜態(tài)和不可變的時(shí)候以大寫(xiě)字母開(kāi)頭。變量名不應(yīng)該太長(zhǎng)或太短秤涩。

let myLet = 0 //推薦
let i = 0//不推薦帜乞,太短
  1. 類(lèi)型名應(yīng)該只包含字母數(shù)字字符,以大寫(xiě)字符開(kāi)頭溉仑,長(zhǎng)度在3到40個(gè)字符之間。
class MyType {}
  1. Bool類(lèi)型命名時(shí)状植,使用is作為前綴浊竟;Bool類(lèi)型聲明時(shí)怨喘,更應(yīng)該選擇非可選性。
let isEnable: Bool = false//推薦
let foo: Bool? = nil //不推薦
  1. Swift中類(lèi)別(類(lèi)振定,結(jié)構(gòu)體)在編譯時(shí)會(huì)把模塊設(shè)置為默認(rèn)的命名空間必怜,所以不用為了區(qū)分類(lèi)別而添加前綴,比如XYHomeViewController后频,但是為了和引用的第三方庫(kù)作區(qū)分梳庆,建議可以繼續(xù)使用前綴,以作為規(guī)范化處 理卑惜,結(jié)構(gòu)更清晰膏执。
  2. 數(shù)組和字典變量定義時(shí)需要標(biāo)明泛型類(lèi)型,并使用更簡(jiǎn)潔清晰的語(yǔ)法露久。
let list: [String] = []
let dict: [String:Int] = [:]
  1. 在指定類(lèi)型時(shí)更米,冒號(hào)應(yīng)該在標(biāo)識(shí)符旁邊,冒號(hào)后應(yīng)有一個(gè)空格毫痕。
let abc: String = "def"http://推薦
let abd : String = "def"http://不推薦
func abc(def: Void, ghi: Void) {}//推薦

函數(shù)使用

  1. 函數(shù)的行數(shù)應(yīng)該控制在40行或更短征峦,不包括注釋和空格
  2. 一行的長(zhǎng)度應(yīng)為120個(gè)字符或更少
  3. 默認(rèn)參數(shù)應(yīng)該出現(xiàn)在參數(shù)列表末尾
func foo(x: String, y: Int = 0, z: CGFloat = 0) {}//推薦
  1. 與傳統(tǒng)的便利功能相比,Swift構(gòu)造函數(shù)更受青睞消请。
CGPoint(x: 10, y: 10)//推薦
CGPointMake(10, 10)//不推薦

5.鏈?zhǔn)胶瘮?shù)調(diào)用應(yīng)該是在同一行上栏笆,或者是每行一個(gè)。多個(gè)參數(shù)時(shí)也遵循這個(gè)原則

let evenSquaresSum = [20, 17, 35, 4].filter { $0 % 2 == 0 }.map { $0 * $0 }.reduce(0, +)//推薦
let chain = a
.b(1, 2, 3)
.c { blah in
    print(blah)
}
.d()//推薦
  1. 當(dāng)函數(shù)的第一個(gè)參數(shù)構(gòu)成整個(gè)語(yǔ)句的介詞時(shí)(如臊泰,at, by, for, in, to, with
    等)蛉加,為第一個(gè)參數(shù)添加介詞參數(shù)標(biāo)簽
func login(with username: String?, password: String?) {
      //
}

7.未實(shí)現(xiàn)的函數(shù)應(yīng)該標(biāo)記為不可用

class ViewController: UIViewController {
  @available(*, unavailable)
  public required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
  }
}

書(shū)寫(xiě)規(guī)范

  1. 任何逗號(hào)前后都不應(yīng)有空格,在逗號(hào)后面加一個(gè)空格
func abc(a: String, b: String) { }//推薦
  1. 打開(kāi)括號(hào)前應(yīng)該有一個(gè)空格因宇,并與聲明在同一行上七婴。
1.func abc() {
  }//推薦
2.[].map() { $0 }//推薦
3.struct Rule
  {
  }//不推薦
  1. 盡量不使用'self.'除非方法參數(shù)與屬性同名。
init(x: Int, y: Int, radius: Double) {
  self.x = x
  self.y = y
  self.radius = radius
}//推薦
self.tableView.delegate = self//不推薦
  1. 盡量避免使用強(qiáng)制解包察滑,強(qiáng)制try打厘。
if let url = NSURL(string: query)//推薦
let url = NSURL(string: query)!//不推薦
func a() throws {}; do { try a() } catch {}//推薦
func a() throws {}; ↓try! a()//不推薦
  1. 只讀計(jì)算屬性的聲明可以去掉 get 關(guān)鍵字和花括號(hào)。
class Foo {
  var foo: Int {
    return 20
  }
}//推薦

6.更喜歡初始化器而不是可視化構(gòu)造器贺辰。

let image = UIImage(named: aVariable)//推薦
let image = #imageLiteral(resourceName: "image.jpg")//不推薦

7.更喜歡使用isEmpty而不是用count判斷是否為空户盯。

[Int]().isEmpty//推薦
[Int]().count > 0//不推薦
myString == ""http://不推薦

8.更喜歡用private而不是fileprivate修飾內(nèi)容。

private extension String {}
  1. 條件語(yǔ)句應(yīng)該總是返回到下一行饲化。
if true { break } else { return }//不推薦

9.注釋的規(guī)范使用

// MARK: ... //'MARK:' 前后均有空格
// FIXME: - ...// '-'前后有空格

10.不要遺留FIXMTODO莽鸭,要解決掉
11.所有聲明都應(yīng)該顯式地指定訪(fǎng)問(wèn)控制級(jí)別的關(guān)鍵字。

private let address: String//推薦
var age: Int = 0 //不推薦

12.一個(gè)文件的內(nèi)容不應(yīng)該超過(guò)400行
13.每一行的末尾吃靠,避免出現(xiàn)分號(hào)

let title: String = "ferry";//不推薦![swift.png](https://upload-images.jianshu.io/upload_images/1059465-c6e0783ae43b74ec.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末硫眨,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子巢块,更是在濱河造成了極大的恐慌礁阁,老刑警劉巖巧号,帶你破解...
    沈念sama閱讀 212,599評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異姥闭,居然都是意外死亡丹鸿,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,629評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)棚品,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)靠欢,“玉大人,你說(shuō)我怎么就攤上這事铜跑∶殴郑” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 158,084評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵疼进,是天一觀的道長(zhǎng)薪缆。 經(jīng)常有香客問(wèn)我,道長(zhǎng)伞广,這世上最難降的妖魔是什么拣帽? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,708評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮嚼锄,結(jié)果婚禮上减拭,老公的妹妹穿的比我還像新娘。我一直安慰自己区丑,他們只是感情好拧粪,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,813評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著沧侥,像睡著了一般可霎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上宴杀,一...
    開(kāi)封第一講書(shū)人閱讀 50,021評(píng)論 1 291
  • 那天癣朗,我揣著相機(jī)與錄音,去河邊找鬼旺罢。 笑死旷余,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扁达。 我是一名探鬼主播正卧,決...
    沈念sama閱讀 39,120評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼跪解!你這毒婦竟也來(lái)了炉旷?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,866評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎窘行,沒(méi)想到半個(gè)月后骏啰,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,308評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡抽高,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,633評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了透绩。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翘骂。...
    茶點(diǎn)故事閱讀 38,768評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖帚豪,靈堂內(nèi)的尸體忽然破棺而出碳竟,到底是詐尸還是另有隱情,我是刑警寧澤狸臣,帶...
    沈念sama閱讀 34,461評(píng)論 4 333
  • 正文 年R本政府宣布莹桅,位于F島的核電站,受9級(jí)特大地震影響烛亦,放射性物質(zhì)發(fā)生泄漏诈泼。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,094評(píng)論 3 317
  • 文/蒙蒙 一煤禽、第九天 我趴在偏房一處隱蔽的房頂上張望铐达。 院中可真熱鬧,春花似錦檬果、人聲如沸瓮孙。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,850評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)杭抠。三九已至,卻和暖如春恳啥,著一層夾襖步出監(jiān)牢的瞬間偏灿,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,082評(píng)論 1 267
  • 我被黑心中介騙來(lái)泰國(guó)打工角寸, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留菩混,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,571評(píng)論 2 362
  • 正文 我出身青樓扁藕,卻偏偏與公主長(zhǎng)得像沮峡,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子亿柑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,666評(píng)論 2 350

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

  • 第2章 基本語(yǔ)法 2.1 概述 基本句法和變量 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line)邢疙,也就是一...
    悟名先生閱讀 4,132評(píng)論 0 13
  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,374評(píng)論 0 5
  • 圖片來(lái)自橙子學(xué)院課件 職場(chǎng)匯報(bào)的重要性 在職場(chǎng)中疟游,你一定經(jīng)歷或見(jiàn)證了不少“小透明”心中的痛呼畸, 比如:明明做的事和同...
    明明似我閱讀 630評(píng)論 0 2
  • 月色滿(mǎn)空蛮原,微涼如斯。你說(shuō)我不來(lái)另绩,你不走儒陨,可花期已過(guò),情心已散笋籽,我找遍了城市的每個(gè)角落蹦漠,依然不見(jiàn)你的身影,哭泣的蹲...
    梅林桃花飛閱讀 443評(píng)論 2 2
  • 自己就像個(gè)傻子 喜歡一個(gè)不喜歡自己的人 還一直付出 明知道沒(méi)有結(jié)果 卻還犯傻 傻子喜歡著騙子 傷的夠深了 也不肯離...
    從前慢QAQ閱讀 222評(píng)論 1 2