- 主類(lèi)和文件名保持一致,接近OC的風(fēng)格
- 命名采用添加有意義后綴的方式,采用蘋(píng)果推薦的駝峰法
- 數(shù)據(jù)類(lèi)型斑唬,
Model
定義用struct黎泣,enum
- 在
ViewWillLaysubview
中調(diào)整限制 - 可選類(lèi)型相關(guān)操作缤谎,多用
?
坷澡,少用!
XCode自動(dòng)生成的
IBOutlet
保持默認(rèn)
在用频敛!
之前做!=nil
判斷
命名不要用common,public等斟赚,防止失控
Framework,擴(kuò)展Struct來(lái)模擬命名空間任洞,不需要前綴命名來(lái)避免沖突
defer
和Guard
配對(duì)使用,將申請(qǐng)資源和釋放資源寫(xiě)在一起交掏,增加可讀性和安全性Swith
默認(rèn)不要default
刃鳄,有必要的時(shí)候才加靜態(tài)表格用
TableViewController
;其他情況铲汪,包括動(dòng)態(tài)表格,用ViewController
Segue, Storyboard ID
可以和目標(biāo)ViewController
同名掌腰;cell ID可以和cell同名;這樣處理起來(lái)方便Any齿梁,AnyObject
盡量不要用;提倡用泛型來(lái)達(dá)到OC的動(dòng)態(tài)特性勺择,也可以定義一個(gè)共同的protocol
,來(lái)聚合不同的類(lèi)型鼓勵(lì)用enum稿辙,帶附加變量的那種
不推薦用返回函數(shù)的函數(shù),推薦將函數(shù)當(dāng)做參數(shù)的方式
不推薦函數(shù)里面套函數(shù)的方式
frame的接口函數(shù)可以寫(xiě)成全局的函數(shù)邻储。僅僅是top level函數(shù),其他的還是盡量放在某個(gè)class里面吨娜,參考Alamofire這個(gè)第3方庫(kù)的處理方式
= {}()
形式的初始化最好跟lazy關(guān)鍵字一起使用(可以用self),其他情況盡量都放在init函數(shù)中; 靜態(tài)變量初始化時(shí)可以酌情使用(self是否能使用是需要考慮的問(wèn)題)如果有唯一個(gè)的含義宦赠,就用單例替代全局變量,單例是class類(lèi)型的毡琉,繼承自
NSObject
比較好函數(shù)名和
(
之間不要有空格,)
和{
之間空一格绊起。enum和struct主要用來(lái)表示數(shù)據(jù)結(jié)構(gòu)燎斩,比如ViewModel虱歪,命令枚舉等等栅表;class主要表示行為,交互怪瓶,協(xié)作等,比如controller洗贰,logic等等
繼承級(jí)數(shù)在3級(jí)以?xún)?nèi),推薦以系統(tǒng)的為基礎(chǔ)许布,只進(jìn)行1級(jí)繼承;用擴(kuò)展
extension
比較好protocol
和extension
結(jié)合起來(lái)用蜜唾,并且分開(kāi)寫(xiě)庶艾,像系統(tǒng)類(lèi)型做的那樣袁余。這樣相當(dāng)于基類(lèi)咱揍,對(duì)于enum,struct也可以有很多共同基類(lèi)。用
extension
來(lái)提供protocol
的默認(rèn)實(shí)現(xiàn)蟹地,和protocol的定義寫(xiě)在同一個(gè)文件中藤为,相對(duì)于oc中的可選成員。用
extension
對(duì)文件進(jìn)行分模塊缅疟。存儲(chǔ)型變量不能放在extension
中遍愿,這點(diǎn)要注意存淫。但是計(jì)算型的可以沼填。用
if let
或者guard let
解包的時(shí)候,可以使新變量的名字和可選型的變量名一樣坞笙,減少取名字的困惑