[英]Type inference with Generics in Swift
我有这个代码
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”的错误,说它无法转换(等等)。 我相信它无法弄清楚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
有没有什么方法可以让我快速知道它是什么类型没有这种方式的hacky方式。
如果向闭包参数添加类型注释,则编译器可以推断泛型类型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)")
})
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.