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.Multiple 匹配名为错误的函数".
我不明白为什么会这样。
假设您有以下代码:
let protocolVariable: Test = BaseTest()
let array: [[Int]] = protocolVariable.test(with: "")
第二行会调用BaseTest
中的哪个test
? returns [[T]]
的 test
还是 returns [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]]
,因为这次您指的是两个 protocol 方法中的哪一个是不明确的。
我有一个协议 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.Multiple 匹配名为错误的函数".
我不明白为什么会这样。
假设您有以下代码:
let protocolVariable: Test = BaseTest()
let array: [[Int]] = protocolVariable.test(with: "")
第二行会调用BaseTest
中的哪个test
? returns [[T]]
的 test
还是 returns [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]]
,因为这次您指的是两个 protocol 方法中的哪一个是不明确的。