通过结构体和枚举来实现命名。
不想扯什么前言了,直接奔主题吧!
在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"
}
据说这个方法是由Jesse Squires大哥给提出来的,是不是瞬间高大上了好多!
但是还有个小问题,如果是多人合作开发,别人又不知道你这API是个什么鬼,闲的无聊来搞个对象玩玩,这下就不好了;解决办法就是私有化初始化方法,像下面这样:
struct API {
private init() {}
static let BaseURL = "https://example.com/v1/"
static let Token = "sdfiug8186qf68qsdf18389qsh4niuy1"
}
当别人初始化API时就会报错!
使用就更简单了,聪明如你,肯定不用我说也知道了:
class Test {
let url = API.BaseUrl
let token = API.Token
}
除了结构体以外,还可以使用枚举来实现
enum API {
static let BaseURL = "https://example.com/v1/"
static let Token = "sdfiug8186qf68qsdf18389qsh4niuy1"
}
使用枚举就不会有初始化问题,因为枚举不可以初始化的呀!
** 以上两种方法都是比较优雅的命名方法,也更加符合Swift下的格式化要求。**
最后给个发送通知的实例:
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)
今天的课就到这里了,有问题欢迎交流!