馬丁的回答是完全正確的。
這是一個更直接回答你的問題的不同觀點。
在Xcode 6.0中,enum
沒有rawValue
屬性。 rawValue
已添加到Xcode 6.1中,但請注意它是一個只讀計算屬性,因此您無法在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)!
,但如果你想創建一個無效的原始值的枚舉,這將崩潰。
你可以把枚舉值中的一個作爲默認和使用零合併運算??
安全解開它:
self = Rank.fromRaw(rawValue) ?? One
這將避免崩潰,但可能會導致意外你的程序部分的行爲。
你不能在Xcode 6.0中做的是init
返回一個可選值。這個功能是在Xcode 6中添加的。1,正是這種新功能允許他們將fromRaw()
從Xcode 6.0中的函數更改爲Xcode 6.1中的可選初始化函數。
你知道是否支持正常/不可分解的初始值設定項,或者只是破壞了嗎? http://stackoverflow.com/questions/28653484/swift-enums-normal-non-failable-initializers-not-supported-or-just-broken?謝謝-c – 2015-02-22 01:33:49
檢查Xcode 7.0(測試版3)和'Rank(rawValue:「One」)'正確初始化枚舉成員... – Zorayr 2015-07-27 00:31:50