關於代碼規範,大同小異。javascript
今天就對代碼規範來個簡單的概述,意見不一樣的,歡迎討論:css
說明:編碼遵循簡單,直觀,清晰的原則,才能易讀、易維護。最重要的是養成常常作註釋的良好習慣。java
oc代碼:編程
1、 命名swift
1.1 常量:bash
能夠寫的比較隨意,可是最好也用相應意思的英文來寫,不然會很難讀懂。svn
1.2 變量:函數
遵循駝峯命名法工具
UI控件,咱們就要以「功能」+「類型」來命名,言簡意賅,一眼就能看出來他的功能 。 如「待辦」的表格用 toDoTableView。 單元測試
若是是約束,以Const尾綴,最好寫A的屬性 To B的屬性命名,若是是寬度,能夠很簡單,如C的寬度 = CWidthConst
若是是定義成員變量,記得前面加個下劃線(這裏注意成員變量和類的屬性的區別)
1.3 屬性
修飾屬性的關鍵字:
block,NSString用copy
基本數據類型用assign
UI控件若是不是懶加載用weak,若是是懶加載用strong
對象(包括CALayer)屬性用strong
readOnly(只讀不能修改,其實用KVC都是能夠賦值的)
1.4 方法名:
遵循駝峯命名法
避免方法的參數過多,通常最多爲5個
若是方法有多個返回狀態,嘗試用enum做爲返回類型
方法名不要用縮寫,儘可能表達方法操做的意思
1.5 通知:
使用「項目前綴」+「發出通知的類」+「did/will」+「動做」+「Notification」
如:
UIKIT_EXTERN NSString *const UIWindowDidResignKeyNotification; // nil
NSString *const SHUserDidLoginNotification = @"SHUserDidLoginNotification";//自定義的通知
1.6 代理:
「項目前綴」+"類名"+「Delegate」
1.7 類:
以項目的前綴開頭
以類的做用+所屬於的類型來命名
如:SHToDoCell, SHToDoController等
1.8 關於宏所有用大寫,多個單詞用下劃線分隔或者用小寫「k」開頭後面遵循駝峯命名法進行定義。
1.9 名字清楚簡單,讓人一目瞭然,儘可能用英文命名名字有意義,名字最好儘量精確表達其內容,不能夠用拼音代替
1.10 儘可能選擇通用詞彙
1.11 避免用縮寫,若是名字太長才在不引發歧義的前提下用縮寫,當命名裏出現縮寫詞時,縮寫詞所有大寫
1.12 避免局部名和外層的名字衝突,避免方法裏面的單詞和參數名字相同
如 不能夠寫 -(void)showView:(UIView *)view name:(NSString*)name
能夠寫-(void)showView:(UIView *)view viewName:(NSString*)name
1.13 文件名:
「項目前綴」+"行爲/屬性"+"類型"命名,如:SHHomeViewController ZFoundTableViewCell
對於一個漢語有多個英文的名字要統一規定好,如交易就是transaction,說了就不要再用deal了
1.14 關於英語詞性的選擇(優秀的產品都應如此):
類和對象名應是名詞
實現行爲的類成員函數名應是動詞
2、註釋:
2.1 每一個類應該在頭文件中寫上註釋,如:
/*****************************************/
//類的中文名稱
//類的做用
//這個類在什麼狀況下將被調用
/*****************************************/
2.2 每一個類的每一個函數前面應該都應該有註釋,如:
/*****************************************/
//函數的中文名稱
//函數的詳細說明
//重要參數說明
//返回值說明
//測試代碼(若是須要則註釋上,方便往後單元測試)
/*****************************************/
2.3 每次作了修改,應該按照以下格式做出說明(通常這個用得很少,由於有svn等代碼管理工具,能夠很輕易的看到哪裏改了,還能夠很容易的回滾。可是不得不說若是一個工程這麼寫的話,即便將工程單獨拿出來,不依靠svn 也能夠很容易的被開發者讀懂,可維護性更強)
/*****************************************/
//類型:修改;修改人:某某某;日期:2012.1.1
//修改緣由:XXXXXXX
/**************/
//原代碼不要刪除,方便改錯後恢復
/**************/
/*****************************************/
2.4 方法中重要的邏輯和語句要做註釋
2.5 類的變量,宏,常量,枚舉等應該有所說明
如:此變量做用是什麼
2.6 程序中要注意用#pragma mark 來對程序進行分塊以及註釋
2.7 添加有必要的註釋,儘量使用Xcode註釋快捷鍵(⌘⌥/)
3、方法:
3.1 避免函數的參數過多,通常最多爲5個
若是是參數大於等於3個的方法,要去折行
3.2 若是函數有多個返回狀態,嘗試用enum做爲返回類型
3.3 規模不能太大,儘可能控制在200行代碼以內,重複使用的代碼抽象成函數
3.4 空行的使用:
在操做符先後加空格
文件中的主要部分用空行分開
方法之間要用兩個空行分開
用空行將代碼按邏輯片段劃分
理論上每一行不超過一屏幕
不要在一行中放多於一條語句
3.5 語句switch中的case按字母順序排列
3.6 不可將布爾變量和邏輯表達式直接與YES、NO或者一、0進行比較。
如: 設bFlag 是布爾類型的變量 能夠寫
if (bFlag) // 表示flag爲真
if (!bFlag) // 表示flag爲假
不要寫:
if (bFlag == TRUE)
if (bFlag == 1)
if (bFlag == FALSE)
if (bFlag == 0)
3.7 不可將浮點變量用「==」或「!=」與任何數字比較。
說明:不管是float仍是double類型的變量,都有精度限制。因此必定要避免將浮點變量用「==」或「!=」與數字比較,應該轉化成「>=」或「<=」形式。
如:能夠寫
if ((fResult >= -EPSINON) && (fResult <= EPSINON))
不能夠寫: if (fResult == 0.0)
其中EPSINON是容許的偏差(即精度)
3.8 優先考慮用代碼代替xib,代碼直觀,且實現容易移植。xib和storyboard更耗費內存。可是swift中例外,由於蘋果在swift中主推storyboard編程
4、類:
4.1 提升類內的聚合度
4.2 下降類間的耦合度
4.3 限制繼承的層數,通常最大爲5
4.4 儘可能不要將基類(父類)強制轉換成派生類(子類)
4.5 對於功能類似的兩個類注意抽取出父類
swift代碼:
從oc轉swift 會有不少的須要注意的地方,以下
1、命名
參考上面oc的 命名。
2、註釋
參考上面oc的 命名。
swift中不用 #pragma mark
而是使用 // MARK: -,按功能、協議、代理等分組
// MARK: - private // MARK: - click // MARK: - loadData
3、函數
在swift中 你們大多都叫函數了,不叫方法了
參考上面oc的 命名。
須要注意的是swift中:
判斷語句不用加括號
如:
if typeValue == 1 {
}
在訪問枚舉類型時,使用更簡潔的點語法
let color = UIColor.red
當對外接口不兼容時,使用@available(iOS x.0, *) 標明接口適配的起始系統版本號
@available(iOS 8.0, *) func myFunction() { }
沒條語句後面不要加分號
bool類型命名時,使用is做爲前綴 var isMine: Bool = false
當函數的第一個參數構成整個語句的介詞時(如,at, by, for, in, to, with 等),爲第一個參數添加介詞參數標籤
func login(with username: String?, password: String?){
}
可選類型拆包取值時,使用if let 判斷
if let data = result.data {
}
多個可選類型拆包取值時,將多個if let 判斷合併
if let name = person.name, let age = person.age {
}
避免使用 as! 或 try! 而是使用if let as?判斷
if let name = person.name as? String {
}
組和字典變量定義時須要標明泛型類型,並使用更簡潔清晰的語法
var names: [String] = []
var values: [String: Int] = [:]
var person: [String: Any] = [:]
4、類
參考上面oc的 命名。