我有這樣的代碼:
enum Enum: String {
case A = "A"
}
let s: String? = Enum(rawValue: "A")
當然,它不會編譯。通常情況下,我解決這個問題是這樣的:
let s: String? = Enum(rawValue: "A")?.rawValue
然而,Xcode中說,我要補充.map { $0.rawValue }
:
這是奇怪,因爲顯然,Xcode是意識到訪問rawValue
可以把Enum
成一個String
。但爲什麼它建議使用map
?爲什麼不直接訪問它?
我想的Xcode會這樣想:
我有一個字符串在左邊,一個枚舉,其原始值的字符串常量。這些類型不兼容,但我知道
rawValue
可以將枚舉變成一個字符串。我只是建議用戶添加?.rawValue
!
什麼是Xcode的 「思維過程」 這背後?
P.S.我的意圖是檢查"A"
是否爲枚舉的有效原始值。如果是,則將其分配給s
,否則分配nil
。我知道這不太實際,但我只關心Xcode的行爲。
剛在遊樂場,你最初的固定在那裏工作。好奇XCode是如何使用map來「思考」的,可以解決這個問題。 – antonio081014
真的,我很驚訝Xcode足夠聰明,甚至可以提供一個修補程序 - 它首先。 – Hamish
請不要打擾Xcode與那些適得其反的東西,你 - 開發人員 - 應該在編譯時知道。枚舉案例不能在運行時更改,因此潛在的崩潰清楚地顯示了開發人員錯誤。 – vadian