无法识别swift – 枚举的rawValue属性

前端之家收集整理的这篇文章主要介绍了无法识别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().

猜你在找的Swift相关文章