[英]How do I call a generic Swift function when none of the arguments provides the generic type?
[英]How do I stop a generic function in Swift matching a Tuple type?
我有這兩種方法
func doSomething<T>(_ completion: (T) -> Void) { ... }
func doSomething<T, U>(_ completion: (T, U) -> Void) { ... }
不幸的是,當我嘗試使用具有兩種泛型類型的版本時,這將無法編譯。
doSomething { (value1: String, value2: Int) in ... }
因為它在第二個doSomething<String, Int>
和第一個doSomething<(String, Int)>
之間是不明確的,即一個泛型類型,它是一個包含兩個字符串的元組。
顯然,我可以將這些方法稱為兩個不同的名稱嗎? 有沒有辦法在不這樣做的情況下解決這種歧義?
( doSomething as ( (String, Int) -> Void ) -> Void ) { value1, value2 in }
你可以做一個類型別名…
typealias DoSomething<T, U> = ( (T, U) -> Void ) -> Void
(doSomething as DoSomething) { (value1: String, value2: Int) in }
(doSomething as DoSomething<String, Int>) { _ = ($0, $1) }
…但是類型別名不能被重載,所以你需要一個為每個 function 重載但一個。 那沒有任何意義; 給函數起不同的名字會更簡單。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.