Swift中的全局常量文件

在我的Objective-C项目中,我经常使用全局常量文件来存储诸如通知名称和的键之类的东西NSUserDefaults。看起来像这样:

@interface GlobalConstants : NSObject

extern 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

回到顶部