我有这个代码
func getMeGoodies<T>(String:goodieName, callback:(goodie:T) -> ()) {
var goodie:T = //get it from the jug
callback(goodie)
}
在某个地方我想调用它
self.getMeGoodies("chocolatechip", callback: { (goodie) -> () in
println("eat the \(goodie)")
})
我在字符串“chocolatechip”处收到一条错误消息,说它无法转换(blah blah)。我相信它无法弄清楚 T
是什么,因为当我从函数返回 goodie
并在调用它时将其分配给变量时它起作用(或者只是做类型转换)
var chocolateChip:Goodie = self.getMeGoodies("chocolatechip", callback: { (goodie) -> () in
println("eat the \(goodie)")
})
或
self.getMeGoodies("chocolatechip", callback: { (goodie) -> () in
println("eat the \(goodie)")
}) as Goodie
有什么方法可以让 swift 知道它是什么类型,而无需采用那种笨拙的方式。
最佳答案
如果你给闭包参数添加一个类型注解那么
编译器可以推断泛型类型 T
:
self.getMeGoodies("chocolatechip", callback: { (goodie : Goodie) -> () in
println("eat the \(goodie)")
})
另一种方法是将类型作为参数传递给方法:
func getMeGoodies<T>(type : T.Type, goodieName : String, callback:(goodie:T) -> ()) {
var goodie:T = 0 //get it from the jug
callback(goodie: goodie)
}
self.getMeGoodies(Goodie.self, goodieName: "chocolatechip", callback: { (goodie) in
println("eat the \(goodie)")
})
关于ios - 在 Swift 中使用泛型进行类型推断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27507880/