首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用计算的属性设置器导致“无法分配此表达式的结果”。

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

Stack Overflow用户
提问于 2015-07-09 09:59:31
回答 1查看 139关注 0票数 1

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

代码语言:javascript
复制
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
}

编辑:

要以属性的形式访问缺省值,我最终得到如下结果:

代码语言:javascript
复制
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
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-09 10:35:08

代码语言:javascript
复制
Switchers.SomeOption.defaults = !state

等于

代码语言:javascript
复制
let z = Switchers.SomeOption
z.defaults = !state

不允许分配,因为z是不可变的。

要解决这个问题,你可以

代码语言:javascript
复制
var z = Switchers.SomeOption
z.defaults = !state

无论如何,编写Switchers.SomeOption.defaults = !state是没有意义的(Switchers.SomeOption是一个“孤立的”值--您可以请求一个,并更改它的defaults属性,但是永远不要将值存储到变量,所以语句是无用的)。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31314198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档