swift - 继承类中的类 func() 存在奇怪的歧义 [Swift]

标签 swift inheritance swift5

我在 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 上的 allMom 上的 all 具有不同的签名。因此,Mom 上的 all 不能覆盖 Parent 上的 all(编译器不需要 >覆盖关键字)。这意味着 Mom 类型上存在两个名为 all 的类函数。此外,传递给 forEach 的闭包没有指定参数类型,因此无法确定引用了两个函数中的哪一个。为 forEach 中的 mom 参数分配类型将解决此问题。

关于swift - 继承类中的类 func() 存在奇怪的歧义 [Swift],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60086737/

相关文章:

ios - 在 swift 5 中设置 UITextField 底部边框的问题

ios - SciChart IOS 固定网格线和刻度标签

Java 继承设计与 HttpServlet - 会导致问题吗

android - 如何从父类调用子类的方法?

java - 在 Java/继承中重用静态字符串数组,就像字符串数组中的概念一样

ios - SwiftUI 中的 Gridview

swift - NSMutableAttributedString 中的可点击链接需要显示另一个 View Controller / Storyboard

ios - 如果 Collection View 单元格中的计数 > 8,则将额外的单元格添加为 "see more"

ios - 如何在 Swift4 中从 HTML 字符串中清除 CSS 文本

swift - 协议(protocol)方法中的返回类型协变