通過結(jié)構(gòu)體和枚舉來實現(xiàn)命名。
不想扯什么前言了,直接奔主題吧!
在OC中我們通過添加前綴來避免與其他文件重名,例如,我有一個URL和一個token在OC中會像這樣命名:
NSString * const XXAPIBaseURL = @"https://example.com/v1";
NSString * const XXAPIToken = @"sdfiug8186qf68qsdf18389qsh4niuy1";
其缺點是不好看也不好讀,而在Swift中有很多新特性可以逆襲這點,像這樣:
struct API {
static let BaseURL = "https://example.com/v1/"
static let Token = "sdfiug8186qf68qsdf18389qsh4niuy1"
}
據(jù)說這個方法是由Jesse Squires大哥給提出來的,是不是瞬間高大上了好多!
但是還有個小問題,如果是多人合作開發(fā),別人又不知道你這API是個什么鬼,閑的無聊來搞個對象玩玩,這下就不好了;解決辦法就是私有化初始化方法,像下面這樣:
struct API {
private init() {}
static let BaseURL = "https://example.com/v1/"
static let Token = "sdfiug8186qf68qsdf18389qsh4niuy1"
}
當(dāng)別人初始化API時就會報錯!
使用就更簡單了,聰明如你,肯定不用我說也知道了:
class Test {
let url = API.BaseUrl
let token = API.Token
}
除了結(jié)構(gòu)體以外,還可以使用枚舉來實現(xiàn)
enum API {
static let BaseURL = "https://example.com/v1/"
static let Token = "sdfiug8186qf68qsdf18389qsh4niuy1"
}
使用枚舉就不會有初始化問題,因為枚舉不可以初始化的呀!
** 以上兩種方法都是比較優(yōu)雅的命名方法,也更加符合Swift下的格式化要求。**
最后給個發(fā)送通知的實例:
enum UserDefaults {
static let CurrentVersion = "currentVesion"
static let DarkModeEnabled = "darkModeEnabled"
}
enum Notifications {
static let DidUpdateProfile = "DidUpdateProfile"
static let DidUpdateReadState = "DidUpdateReadState"
static let DidSynchronizeBookmarks = "DidSynchronizeBookmarks"
}
// Post Notification
let notificationCenter = NSNotificationCenter.defaultCenter()
notificationCenter.postNotificationName(Notifications.DidSynchronizeBookmarks, object: self)
// Update User Defaults
let userDefaults = NSUserDefaults.standardUserDefaults()
userDefaults.setBool(darkModeEnabled, forKey: UserDefaults.DarkModeEnabled)
今天的課就到這里了,有問題歡迎交流!