簡體   English   中英

如何停止與元組類型匹配的 Swift 中的通用 function ?

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

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