Ios Swift中的泛型类型推理

Ios Swift中的泛型类型推理,ios,swift,ios8,Ios,Swift,Ios8,我有这个密码 func getMeGoodies<T>(String:goodieName, callback:(goodie:T) -> ()) { var goodie:T = //get it from the jug callback(goodie) } 我在字符串“chocolatechip”中得到一个错误,说它不能转换(诸如此类)。我认为它无法理解T是什么,因为当我从函数返回goodie并在调用它时将其分配给变量(或者简单地进行转换)时,它会工作 或

我有这个密码

func getMeGoodies<T>(String:goodieName, callback:(goodie:T) -> ()) {
   var goodie:T = //get it from the jug
   callback(goodie)
}
我在字符串“chocolatechip”中得到一个错误,说它不能转换(诸如此类)。我认为它无法理解
T
是什么,因为当我从函数返回
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)")
})
func getMeGoodies(类型:T.type,goodieName:String,回调:(goodie:T)->()){
var goodie:T=0//从罐子里拿出来
回调(goodie:goodie)
}
self.getMeGoodies(Goodie.self,Goodie名称:“巧克力片”,回调:{(Goodie)in
println(“吃\(糖果)”)
})

我认为您的第一个工作示例和Martin R的答案都是很好的方法。您的示例可能更具可读性,因为闭包中没有嵌入类型信息!谢谢斯威夫特肯定是更聪明的饼干;)
self.getMeGoodies("chocolatechip", callback: { (goodie) -> () in
            println("eat the \(goodie)")
        }) as Goodie
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)")
})