基本上我有一个DataManager单例如下:
class DataManager {
static let shared = DataManager()
private init() {}
static func set(_ object: String, forKey defaultName: String) {
let defaults: UserDefaults = UserDefaults.standard
defaults.set(object, forKey:defaultName)
defaults.synchronize()
}
static func object(forKey key: String) -> String {
let defaults: UserDefaults = UserDefaults.standard
return defaults.object(forKey: key) as! String
}
}
在设置或检索已保存的对象时,我想要实现以下目的:
DataManager.set("some hash", forKey: .hash)
而不是:
DataManager.set("some hash", forKey: "hash")
另外,我正在寻找的功能的技术术语是什么?
答案 0 :(得分:1)
是的,您可以使用枚举,例如:
enum DataManagerKey: String {
case hash
}
然后在set方法中使用它:
static func set(_ object: String, forKey defaultName: DataManagerKey)
答案 1 :(得分:1)
你可以有一个枚举,只需要DefaultKey
enum DefaultKey: String {
case hash = "hash"
case secondKey = "secondKey"
case thirdKey = "thirdKey"
}
现在你需要做的是
static func set(_ object: String, forKey keyType: DefaultKey) {
let defaults: UserDefaults = UserDefaults.standard
let key = keyType.rawValue // rawvalue for keyType .hash will actually return you "hash".
defaults.set(object, forKey: key)
defaults.synchronize()
}
现在您可以调用类似
的功能了 DataManager.set("some hash", forKey: .hash)
答案 2 :(得分:1)
您可以通过实现枚举并让defaultName
参数数据类型为实现的枚举来实现它,如下所示:
enum DataManagerDefaultName: String {
case hash
// other cases goes here
}
用法:
class DataManager {
static let shared = DataManager()
private init() {
}
static func set(_ object: String, forKey defaultName: String) { {
let defaults: UserDefaults = UserDefaults.standard
defaults.set(object, forKey:defaultName.rawValue)
defaults.synchronize()
}
static func object(forKey key: DataManagerDefaultName) -> String {
let defaults: UserDefaults = UserDefaults.standard
return defaults.object(forKey: key) as! String
}
}
执行:
// executing:
// setting the value:
DataManager.set("my value", forKey: .hash)
// getting the value:
let myValue = DataManager.object(forKey: .hash) // "my value"
请注意,您不仅可以使用枚举设置值,还可以获取它。
答案 3 :(得分:1)
我找到了在课堂上定义enum
最干净的方法,如下所示:
class DataManager {
enum Key: String {
case hash
}
static let shared = DataManager()
private init() {
}
static func set(_ object: String, forKey defaultName: DataManager.Key) {
let defaults: UserDefaults = UserDefaults.standard
defaults.set(object, forKey:defaultName.rawValue)
defaults.synchronize()
}
static func object(forKey key: DataManager.Key) -> String {
let defaults: UserDefaults = UserDefaults.standard
return defaults.object(forKey: key.rawValue) as! String
}
}
用法与在外部定义的用法保持一致,因为Swift将推断出DataManager.Key
前缀:
DataManager.set("some hash", forKey: .hash)