Cấu trúc như không gian tên
IMO cách tốt nhất để đối phó với loại hằng số đó là tạo ra Struct.
struct Constants {
static let someNotification = "TEST"
}
Sau đó, ví dụ, gọi nó như thế này trong mã của bạn:
print(Constants.someNotification)
Làm tổ
Nếu bạn muốn tổ chức tốt hơn, tôi khuyên bạn nên sử dụng các cấu trúc con được phân đoạn
struct K {
struct NotificationKey {
static let Welcome = "kWelcomeNotif"
}
struct Path {
static let Documents = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
static let Tmp = NSTemporaryDirectory()
}
}
Sau đó, bạn chỉ có thể sử dụng ví dụ K.Path.Tmp
Ví dụ thế giới thực
Đây chỉ là một giải pháp kỹ thuật, việc triển khai thực tế trong mã của tôi trông giống như:
struct GraphicColors {
static let grayDark = UIColor(0.2)
static let grayUltraDark = UIColor(0.1)
static let brown = UIColor(rgb: 126, 99, 89)
// etc.
}
và
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
}
}
}