【发布时间】:2016-01-28 02:04:51
【问题描述】:
我正在构建一个助手来启用对NSUserDefaults 属性的类型访问。像这样的:
struct UserDefaults {
private static var standardUserDefaults: NSUserDefaults = {
return NSUserDefaults.standardUserDefaults()
}()
private static let propKey = "PROP"
static var prop: Bool {
get {
return standardUserDefaults.boolForKey(propKey)
}
set {
standardUserDefaults.setBool(newValue, forKey: propKey)
standardUserDefaults.synchronize()
}
}
}
这样我可以有一个很好的语法来读写NSUserDefaults:
UserDefaults.prop // read
UserDefaults.prop = false // write
问题是有很多样板代码,每个附加属性我需要 10 行。
有什么方法可以减少每个新属性所需的行数?重用getter和setter?任何类型的运行时生成器?
【问题讨论】:
-
func valueForUndefinedKey(_ key: String) -> AnyObject?怎么样 -
你可以使用枚举。在一个枚举中定义很多值,然后使用
UserDefaults.get(enum.value)。没有那么优雅,但代码更少。 -
我想过@Putz1103,但正如你所说,没那么优雅
-
@RolandasR,这样做的目的是拥有类型化的变量和良好的语法。我不明白
valueForUndefinedKey可以如何帮助我们 -
@gfpacheco 您仍然可以将属性定义为
dynamic(ObjC 中的@dynamic)