微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Swift枚举值无法设置

我在我的应用程序中添加了一些语法糖,我遇到了“不一致”.它可能是有充分理由的,但有没有办法清理实现.
我这样做是为了提供一个地方来设置/获取一些属性.

enum MyType: String {
    case UnkNown,First,Second

    var enabled: Bool {
        set { UserDefaults.standard.set(newValue,forKey: self.rawValue) }
        get { return UserDefaults.standard.bool(forKey: self.rawValue) }
    }

}

现在我可以使用枚举值获取认值

if MyType.First.enabled {
    ........
}

但我不能直接设置值:

MyType.First.enabled = true

引发“无法设置属性,首先不可分配”

但我可以逃脱

var type = MyType.First
type.enabled = true

有一种简单的方法来使用单行方法吗?

解决方法

问题是枚举是值类型,所以当你在MyType.First上调用启用的setter时,你也会改变First.如果未明确地将值类型分配给可变变量,则将它们视为不可变.这就是为什么如果MyType.First.enabled {…}不起作用,但是

var type = MyType.First
type.enabled = true

确实.

如果将setter标记为非突变,则问题将得到解决,因为编译器现在在调用属性上的setter时不会改变值类型.

enum MyType: String {
    case unkNown,first,second

    var enabled: Bool {
        nonmutating set { UserDefaults.standard.set(newValue,forKey: self.rawValue) }
        get { return UserDefaults.standard.bool(forKey: self.rawValue) }
    }

}

P.S.:枚举案例的Swift命名约定是lowerCamelCase,因为它们本身不是类型,只有类型应该是UpperCamelCase.我相应地修改了你的MyType枚举.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐