ios - 使用计算属性 setter 导致 "Cannot assign to the result of this expression"

标签 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
}

最佳答案

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/

相关文章:

ios - 如果在 objective-c 中的 xcode 中打开开关,如何调用方法

ios - NSURLSession 后台 session 中的 NSURLSessionDownloadTask 出错

ios - 替换 WatchKit 中分层导航堆栈中的 Controller

ios - 如何将图像数组传递到另一个 View ?

swift - 自动显示注释标题

swift - UILabel 在单独的 swift 文件中运行

ios - 将 UIViewController 与 UITableView 转换为 UITableViewController

ios - 警告 : RLMNotificationToken released without unregistering

ios - CV日历: How to override CVCalendar properties that do not have explicit function API?

ios - 使用 CGPoint 从图像中获取像素颜色