当我尝试访问枚举计算属性"不能分配给这个表达式的结果"错误消息出现。我做错了什么?
enum Switchers:String {
case SomeOption = "SomeOption"
var defaults:Bool {
get {
return NSUserDefaults.standardUserDefaults().boolForKey(self.rawValue)
}
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: self.rawValue)
}
}
}
func UseSwitchers () {
let state = Switchers.SomeOption.defaults
Switchers.SomeOption.defaults = !state // Error: Cannot assign to the result of this expression
}
编辑:
要访问默认值作为属性,我最终这样做:
struct Preferences {
private enum Keys: String {
case SomeOption = "SomeOption"
}
static func setUp () {
NSUserDefaults.standardUserDefaults().registerDefaults([Keys.SomeOption.rawValue:true])
}
static var someOption: Bool {
get {
return NSUserDefaults.standardUserDefaults().boolForKey(Keys.SomeOption.rawValue)
}
set {
NSUserDefaults.standardUserDefaults().setBool(newValue, forKey: Keys.SomeOption.rawValue)
}
}
}
func UsePreferences () {
Preferences.setUp()
let someOption = Preferences.someOption
Preferences.someOption = !someOption
}
Switchers.SomeOption.defaults = !state
等价于
let z = Switchers.SomeOption
z.defaults = !state
不允许赋值,因为z
是不可变的。
要修复它,可以执行
var z = Switchers.SomeOption
z.defaults = !state
无论如何写Switchers.SomeOption.defaults = !state
是没有意义的(Switchers.SomeOption
是一个"孤立"的值-你要求一个,并改变它的defaults
属性,但从不将值存储到变量中,所以语句是无用的)。