加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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

发布时间:2020-12-14 05:35:48 所属栏目:百科 来源:网络整理
导读:我正在使用 Xcode 6的游乐场试试 Swift中的枚举: enum Rank: String{ case One = "One",Two="Two" init(rawValue : String) { self.rawValue = rawValue }} 我想覆盖init,以便可以使用它的rawValue作为参数来初始化枚举.但是我收到一个错误: 但是根据Apple
我正在使用 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().

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读