Swift ENUMS - 为什么我在我的enum初始化程序中隐式解包?这迫使我

时间:2016-11-20 18:03:13

标签: swift optional

在此示例中,在Seasons枚举中,初始化程序强制我添加“!”隐式解包在初始化器的末尾为'self'。如果我删除“!”,我会收到错误:“可选类型季节的价值?未解包..你的意思是使用'!',或'?'......

起初我认为这与使用rawValue方法有关,可能Swift很聪明,知道用户输入的值可能不是实际值,所以它会自动使它成为可选项,但是,就像你一样我可以看到,在Seasons命名空间之外,我已经创建了一个常量下降,并且再次使用了rawValue方法,这次它完美无误地工作。

所以我的问题是,这个案例特别是什么使得Swift在分配给SELF时创建了一个可选项,但是当我没有分配给SELF时,Swift完全允许它在没有可选的情况下很好?

由于

enum Seasons : String {
    case fall
    case winter
    case spring
    case summer

    static var possibleCases : [Seasons] = [.fall, .winter, .spring, .summer]

    init(_ val: String) {
        self = Seasons(rawValue: val)!
    }
}


let fall = Seasons(rawValue: "fall")

1 个答案:

答案 0 :(得分:0)

感谢您的回答。我想通过使用(rawValue :)方法直接调用Enum实际上是一个BUILT IN初始化器本身。就好像每个枚举中都有一个init?(rawValue :)初始化程序,但它是构建的,你看不到它。

我的问题不正确 - 'fall'常量实际上是一个可选项。