Swift中的通用字典值类型

时间:2014-07-14 12:32:23

标签: generics dictionary swift

我正在尝试创建一个字典变量,其值是两种类型之一。我的尝试的一个例子应该更清楚:

var objects: <T where T: Float, T: Bool>[String: T]

这会抛出编译器错误,只有语法函数类型可以是通用的。我想知道是否有可能,我只是不知道正确的语法?

1 个答案:

答案 0 :(得分:15)

您想要的工具是带有相关数据的枚举。

enum Stuff {
  case FloatyThing(Float)
  case BoolyThing(Bool)
}

let objects = ["yes!"   : Stuff.BoolyThing(true),
               "number" : Stuff.FloatyThing(1.0)]

这捕获&#34;一个浮动或布尔的对象&#34;并提供更好的文档和类型安全性。

要卸载数据,请使用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语句可确保覆盖所有可能的类型,并防止您意外地将数据卸载为错误的类型。非常好,编译器可以帮助你。

有关更多信息,请参阅&#34;枚举和结构&#34;在Swift编程语言中。

我还推荐Alexandros Salazar的Error Handling in Swift作为一个非常好的例子来说明如何使用它来处理常见问题。