5
我試圖創建一個字典變量,其值是兩種類型之一。我嘗試的例子會更好理解:Swift中的通用字典值類型
var objects: <T where T: Float, T: Bool>[String: T]
此拋出,只有句法功能類型可以是通用的編譯錯誤。我想知道這是否可能,我只是不知道正確的語法?
我試圖創建一個字典變量,其值是兩種類型之一。我嘗試的例子會更好理解:Swift中的通用字典值類型
var objects: <T where T: Float, T: Bool>[String: T]
此拋出,只有句法功能類型可以是通用的編譯錯誤。我想知道這是否可能,我只是不知道正確的語法?
您想要的工具是一個帶有關聯數據的枚舉。
enum Stuff {
case FloatyThing(Float)
case BoolyThing(Bool)
}
let objects = ["yes!" : Stuff.BoolyThing(true),
"number" : Stuff.FloatyThing(1.0)]
這會捕獲「一個浮點或布爾對象」,並提供更好的文檔和類型安全性。
卸載數據,使用switch語句:
if let something = objects["yes!"] {
switch something {
case .FloatyThing(let f): println("I'm a float!", f)
case .BoolyThing(let b): println("Am I true?", b)
}
}
使用switch語句確保您覆蓋所有可能的類型和防止意外卸載數據錯誤的類型。很不錯,編譯器可以幫助你很多。
有關更多信息,請參閱Swift編程語言中的「枚舉和結構」。
我也推薦Alexandros Salazar的Error Handling in Swift,這是一個非常好的例子,它可以用來解決常見的問題。
+1:非常快速。 – Jesper
你如何確定該值是什麼類型,或者打開該值? – Nick
更新了一些更多的背景。這是Swift中非常強大的功能,我希望它很常見。 –