swift - 为什么这个带有可选参数的方法不覆盖基类方法?

标签 swift

结果是“a”,但我希望它是“b”。我想知道为什么,以及如何在没有参数的情况下调用 doTest 来打印“b”。

class AA {
    func doTest() {
        print("a")
    }
}

class BB: AA {
    func doTest(_ different: Bool = true) {
        print("b")
    }
}

let bObjc = BB()
bObjc.doTest()

最佳答案

BB 类没有覆盖AA 中的方法,这意味着BB 上存在两个方法:

func doTest() // inherited
func doTest(_ different: Bool = true) // declared

当你打电话时

bObjc.doTest()

编译器必须选择其中之一。而且它更喜欢没有参数的方法而不是有默认参数的方法。

关于swift - 为什么这个带有可选参数的方法不覆盖基类方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56664243/

相关文章:

swift - 如果多次触摸,如何从父节点中删除节点?

ios - PeerId(MCPeerID)定制

ios - 重新加载表格 View 而不影响单元格中的倒数计时器

ios - 定义结构时的错误信息

ios - 为预览图层设置边框会导致边框设置不正确

swift - 在 Swift 中找不到结构类型的成员 <方法名称>

ios - 嵌入 UICollectionViewCell 中的自调整大小 UITableView

ios - 如何模仿 map 应用程序的底部工作表?

Swift NWListener 监听、取消、重新监听成功?

json - swift 4 使用 Alamofire 解析没有键的 JSON