Swift枚举值无法设置
发布时间:2020-12-14 04:39:04 所属栏目:百科 来源:网络整理
导读:我在我的应用程序中添加了一些语法糖,我遇到了“不一致”.它可能是有充分理由的,但有没有办法清理实现. 我这样做是为了提供一个地方来设置/获取一些属性. enum MyType: String { case Unknown,First,Second var enabled: Bool { set { UserDefaults.standard
我在我的应用程序中添加了一些语法糖,我遇到了“不一致”.它可能是有充分理由的,但有没有办法清理实现.
我这样做是为了提供一个地方来设置/获取一些属性. 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枚举. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |