class A {
func test(string: String, another defaultValue: String = "") {
///...
}
}
class B {
func test(string: String, different defaultValue: Bool = true) {
///...
}
}
protocol Test {
func test(string: String)
}
extension A: Test {
func test(string: String) {
self.test(string: string)
}
}
extension B: Test {
func test(string: String) {
self.test(string: string)
}
}
当我这样做时,我得到以下错误
函数调用导致无限递归
如何对函数名称相似的类确认协议Test
2条答案
按热度按时间kgsdhlau1#
当A或B符合测试时,程序无法知道您调用的是哪个
.test
,因为A和B中的内部.test
方法具有缺省值。要解决歧义,您可以具体说明:
ruarlubt2#
您必须使用完整签名调用类方法:
由于Swift允许方法重载,因此您可以使用相同的函数名称和不同的签名。在您的示例中,类方法与协议方法具有不同的签名,因此这是可以接受的。但是,类方法有缺省值,可以在没有完整签名的情况下调用,在这种情况下,它是不明确的,因为签名变得相同。