[英]Swift protocol multiple matching functions named error
我有一個協議和 class 如下所示,
protocol Test {
func test<T>(with string: String) -> Array<T>
func test<T>(with string: String) -> Array<[T]>
}
class BaseTest {
func test<T>(with string: String) -> Array<T> {
return []
}
func test<T>(with string: String) -> Array<[T]> {
return []
}
}
它就像那樣工作得很好但是當我遵守協議時會出現這個錯誤,
“1.多個匹配函數命名錯誤” 。
我不明白為什么會這樣。
想象一下,您有以下代碼:
let protocolVariable: Test = BaseTest()
let array: [[Int]] = protocolVariable.test(with: "")
第二行調用BaseTest
中的哪個test
? 返回[[T]]
的test
還是返回[T]
的test
? 它可以同時調用兩者,不是嗎? 它可以調用第一個test
,因為T
可以推斷為[Int]
。 它可以調用第二個test
,因為T
可以被推斷為Int
。
如果你不遵守協議,仍然會出現錯誤,但錯誤實際上會出現在調用站點上:
let array: [[Int]] = BaseTest().test(with: "") // error
當您遵守協議時,編譯器將嘗試將您的方法與協議中的方法進行匹配(因為它必須檢查您的 class 是否符合協議),因此它會更早地發現這種歧義。
如果刪除第二個test
, BaseTest
將符合協議:
class BaseTest: Test {
func test<T>(with string: String) -> Array<T> {
return []
}
}
但是第一個代碼段中仍然會有錯誤。 如果您嘗試將其分配給[[Int]]
,因為這一次您的意思是兩種協議方法中的哪一種是模棱兩可的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.