在此示例中,在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")
答案 0 :(得分:0)
感谢您的回答。我想通过使用(rawValue :)方法直接调用Enum实际上是一个BUILT IN初始化器本身。就好像每个枚举中都有一个init?(rawValue :)初始化程序,但它是构建的,你看不到它。
我的问题不正确 - 'fall'常量实际上是一个可选项。