簡體   English   中英

在Swift中使用泛型類型推斷

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM