Swift中的全局常量文件
在我的Objective-C项目中,我经常使用全局常量文件来存储诸如通知名称和的键之类的东西NSUserDefaults
。看起来像这样:
@interface GlobalConstants : NSObjectextern NSString *someNotification;
@end
@implementation GlobalConstants
NSString *someNotification = @"aaaaNotification";
@end
在Swift中,我该怎么做?
回答:
结构作为名称空间
IMO处理此类常量的最佳方法是创建Struct。
struct Constants { static let someNotification = "TEST"
}
然后,例如,在您的代码中这样调用它:
print(Constants.someNotification)
套料
如果您想要一个更好的组织,我建议您使用分段的子结构
struct K { struct NotificationKey {
static let Welcome = "kWelcomeNotif"
}
struct Path {
static let Documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
static let Tmp = NSTemporaryDirectory()
}
}
然后您可以使用例如 K.Path.Tmp
现实世界的例子
这只是一个技术解决方案,我的代码中的实际实现看起来更像:
struct GraphicColors { static let grayDark = UIColor(0.2)
static let grayUltraDark = UIColor(0.1)
static let brown = UIColor(rgb: 126, 99, 89)
// etc.
}
和
enum Env: String { case debug
case testFlight
case appStore
}
struct App {
struct Folders {
static let documents: NSString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString
static let temporary: NSString = NSTemporaryDirectory() as NSString
}
static let version: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleShortVersionString") as! String
static let build: String = Bundle.main.object(forInfoDictionaryKey: "CFBundleVersion") as! String
// This is private because the use of 'appConfiguration' is preferred.
private static let isTestFlight = Bundle.main.appStoreReceiptURL?.lastPathComponent == "sandboxReceipt"
// This can be used to add debug statements.
static var isDebug: Bool {
#if DEBUG
return true
#else
return false
#endif
}
static var env: Env {
if isDebug {
return .debug
} else if isTestFlight {
return .testFlight
} else {
return .appStore
}
}
}
以上是 Swift中的全局常量文件 的全部内容, 来源链接: utcz.com/qa/418526.html