1.指導(dǎo)方針:
為了讓代碼更通熟易懂,符合大多數(shù)程序員的閱讀使用習(xí)慣,所以總結(jié)一下相關(guān)命名規(guī)范
以下命名規(guī)范包含:
命名分類訪問權(quán)限注釋
2. 命名分類
在項目中,大多數(shù)地方使用駝峰式命名,類,結(jié)構(gòu)體,枚舉,協(xié)議,需要附加前綴,以下示例均使用NY作為前綴
- 2.1 類名class/結(jié)構(gòu)體struct
- 2.2 方法名function
- 2.3 變量variable
- 2.4 常量constant
- 2.5 枚舉enum
- 2.6 協(xié)議protocol
- 2.7 閉包closure
- 2.8 泛型temple
2.1 類名class/結(jié)構(gòu)體struct
class NYPepple: NSObject {
var name: String?
var age: Int?
let color: UIColor?
}
struct NYWeather {
var temperature: CGFloat = 0
var windLevel: Int = 1
}
struct NYLocation {
var longitude: CGFloat = 0
var latitude: CGFloat = 0
}
2.2 方法名function
func deal(with people: NYPepple, at location: NYLocation) {
}
2.3 變量variable
變量命名,采取功能屬性特性+變量類型全稱的形式,請避免使用縮寫的形式
正確寫法
var people: NYPeople = .init()
var nameLabel: UIlabel = .init()
var passwordTextField: UITextField = .init()
var dealViewController: UIViewController = .init()
錯誤寫法
var p: = NYPeople.init()
var nameL = UIlabel.init()
var passwordTF = UITextField.init()
var dealVC = UIViewController()
2.4 常量constant
let weather: NYWeather = .init()
2.5 枚舉enum
enum NYWeatherStyle {
case sunny
case cloudy
case windy
}
2.6 協(xié)議protocol
protocol NYCheckWeatherProtocol: NSObjectProtocol {
func ny_checkWeather(weather: NYWeather, location: NYLocation)
}
2.7 閉包closure
typealias NYActionClosure = (_ item1: String, _ item2: String)->Void
func showWeather(with actionClosure: NYActionClosure) {
}
2.8 泛型temple
泛型通常使用全大寫表示
class NYSon<MODEL>: NYFather {
func print(model: MODEL) {
print(model)
}
}
3 權(quán)限控制
在swift默認(rèn)都是internal類型
- open: 可以在任何地方訪問,包括override和繼承。
- public: 可以在任何地方訪問,但其他module中不可以被override和繼承,而在本module內(nèi)可以被override和繼承。
- internal: 新建文件時默認(rèn)為internal,所修飾的屬性或方法在整個模塊內(nèi)都可以訪問。
- fileprivate: 在當(dāng)前文件內(nèi)可以被訪問,在子類中能訪問。
- private: 在當(dāng)前類中能被訪問,在子類中不能訪問。
在涉及到需要外部訪問的領(lǐng)域,我們默認(rèn)所有類的變量都為private,需要對外公開的屬性設(shè)置為private(set),需要修改類內(nèi)部屬性時,通過對外公開的方法修改(遵循接口開閉的設(shè)計原則)以下為示例代碼:
class NYSon: NSObject {
private(set) var name: String
private(set) var age: Int
init(name: String, age: Int) {
super.init()
self.name = name
self.age = age
}
// 長大1歲
func grow() {
age += 1
}
}
var son: NYSon = .init(name: "little Jhon", age: 12)
son.grow() //長大一歲
print(son.age) //輸出12歲
/**
修改son對象的屬性,僅可以通過類提供的方法去修改,請勿使用
son.age = 12
的方式
*/
4 注釋
注釋使用蘋果推薦的注釋格式, 快捷鍵option + command + / (? + ? + /)