使用计算属性资源库会导致"Cannot assign to the result of this expression"



当我尝试访问枚举计算属性"不能分配给这个表达式的结果"错误消息出现。我做错了什么?

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属性,但从不将值存储到变量中,所以语句是无用的)。

相关内容

最新更新