无法识别swift – 枚举的rawValue属性
我正在使用
Xcode 6的游乐场试试
Swift中的枚举:
enum Rank: String { case One = "One",Two="Two" init(rawValue : String) { self.rawValue = rawValue } } 我想覆盖init,以便可以使用它的rawValue作为参数来初始化枚举.但是我收到一个错误: 但是根据Apple’s Swift guide我的代码应该是正确的.
马丁的答案是完全正确的.
这是一个不同的观点,更直接地回答你的问题. 在Xcode 6.0中,枚举没有rawValue属性.在Xcode 6.1中添加了rawValue,但是注意它是一个只读的计算属性,所以你也不能在Xcode 6.1中分配它. 在Xcode 6.1中,没有必要实现一个采用rawValue的初始化程序,因为它已经由本地语言提供了.如果你试图在Xcode 6.0中模仿这种行为,那么你可以尝试一下: enum Rank: String { case One = "One",Two="Two" init(rawValue : String) { self = Rank.fromRaw(rawValue) } } 但是这样做的问题是fromRaw返回一个可选的枚举值,因为rawValue字符串可能对应于任何枚举值. 那么你现在在做什么呢?你可以添加一个!强制解开该值: self = Rank.fromRaw(rawValue)! 但是如果您尝试创建具有无效原始值的枚举,则会崩溃. 您可以将其中一个枚举值作为默认值,并使用nil合并运算符?安全地解开它: self = Rank.fromRaw(rawValue) ?? One 这将避免崩溃,但可能会导致您的程序的意外行为. 在Xcode 6.0中你不能做的是让init返回一个可选的值.此功能在Xcode 6.1中添加,正是这一新功能允许他们从Xcode 6.0中的函数从Xcode 6.1中的可选初始化程序更改为Raw(). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |