簡體   English   中英

Swift協議多個匹配函數命名錯誤

[英]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 是否符合協議),因此它會更早地發現這種歧義。

如果刪除第二個testBaseTest將符合協議:

class BaseTest: Test {
    func test<T>(with string: String) -> Array<T> {
        return []

    }
}

但是第一個代碼段中仍然會有錯誤。 如果您嘗試將其分配給[[Int]] ,因為這一次您的意思是兩種協議方法中的哪一種是模棱兩可的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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