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