使用计算属性设置器导致“无法分配给此表达式的结果”

时间:2015-07-09 09:59:32

标签: ios swift

当我尝试访问枚举计算属性“无法分配给此表达式的结果”时出现错误消息。我究竟做错了什么?

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
}

1 个答案:

答案 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,但永远不会将值存储到变量中,因此该语句是无用的。)