当我尝试访问枚举计算属性“无法分配给此表达式的结果”时出现错误消息。我究竟做错了什么?
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
}
答案 0 :(得分:1)
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
{{1}} 1}} property,但永远不会将值存储到变量中,因此该语句是无用的。)