当我试图访问枚举计算属性时,“无法分配此表达式的结果”将出现错误消息。我做错了什么?
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
}发布于 2015-07-09 10:35:08
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属性,但是永远不要将值存储到变量,所以语句是无用的)。
https://stackoverflow.com/questions/31314198
复制相似问题