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中非常强大的功能,我希望它很常见。 –