Swift小技巧之命名空间

通过结构体枚举来实现命名。

不想扯什么前言了,直接奔主题吧!

在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)

今天的课就到这里了,有问题欢迎交流!

你可能感兴趣的:(Swift小技巧之命名空间)