在我的Objective-C项目中,我经常使用一个全局常量文件来存储像通知名称和NSUserDefaults键这样的东西。它看起来是这样的:
@interface GlobalConstants : NSObject
extern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
我如何在Swift中做完全相同的事情?
Swift 4版本
如果您想为NotificationCenter创建一个名称:
extension Notification.Name {
static let updateDataList1 = Notification.Name("updateDataList1")
}
订阅通知:
NotificationCenter.default.addObserver(self, selector: #selector(youFunction), name: .updateDataList1, object: nil)
发送通知:
NotificationCenter.default.post(name: .updateDataList1, object: nil)
如果你只是想要一个有变量的类:
class Keys {
static let key1 = "YOU_KEY"
static let key2 = "YOU_KEY"
}
Or:
struct Keys {
static let key1 = "YOU_KEY"
static let key2 = "YOU_KEY"
}
考虑枚举。这些可以在逻辑上分解为单独的用例。
enum UserDefaultsKeys: String {
case SomeNotification = "aaaaNotification"
case DeviceToken = "deviceToken"
}
enum PhotoMetaKeys: String {
case Orientation = "orientation_hv"
case Size = "size"
case DateTaken = "date_taken"
}
一个独特的好处发生在你有一个互斥选项的情况下,比如:
for (key, value) in photoConfigurationFile {
guard let key = PhotoMetaKeys(rawvalue: key) else {
continue // invalid key, ignore it
}
switch (key) {
case.Orientation: {
photo.orientation = value
}
case.Size: {
photo.size = value
}
}
}
在本例中,您将收到一个编译错误,因为您没有处理PhotoMetaKeys.DateTaken的情况。