当我尝试访问枚举计算属性时,出现“无法分配给该表达式的结果”错误消息。我究竟做错了什么?
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
属性,但从不将值存储到变量,因此该语句无用)。
关于ios - 使用计算属性 setter 导致 "Cannot assign to the result of this expression",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31314198/