我在 Swift 中有一个像这样的简单类层次结构。
class Parent {
var name:String = "Unnamed"
class func all() -> [Parent] {
return Dad.all() + Mom.all()
}
}
class Dad:Parent {
static var AllDads:[Dad] = []
class func all() -> [Dad] {
return AllDads
}
}
class Mom:Parent {
static var AllMoms:[Mom] = []
class func all() -> [Mom] {
return AllMoms
}
}
Mom.all().forEach { mom in
print(mom.name)
}
如果我把它放在工作区中,一切都会很好,直到我点击运行按钮。此时它告诉我最后一个表达式 Mom.all()
是不明确的。为什么是这样?有没有办法让类函数在子类型的子类中进行细化,并保持它们明确?
最佳答案
原因是 Parent
上的 all
和 Mom
上的 all
具有不同的签名。因此,Mom
上的 all
不能覆盖 Parent
上的 all
(编译器不需要 >覆盖
关键字)。这意味着 Mom
类型上存在两个名为 all
的类函数。此外,传递给 forEach 的闭包没有指定参数类型,因此无法确定引用了两个函数中的哪一个。为 forEach
中的 mom
参数分配类型将解决此问题。
关于swift - 继承类中的类 func() 存在奇怪的歧义 [Swift],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60086737/