覆盖 class 之外的函数

Overriding a function outside its class

我遇到了一个奇怪的行为。以下代码会在我调用 bar() 时产生编译错误并显示以下消息:"Missing argument for parameter #1 call"

func bar() {
    println("bar with no argument")
}

class ClassA {

    func bar(varOfAnyType: String) {
        println("bar with argument")
    }

    func foo() {
        bar()
    }
}

如果我更改 bar() 函数的名称,则不会出现错误:

func barNameChanged() {
    println("bar with no argument")
}

class ClassA {

    func bar(varOfAnyType: String) {
        println("bar with argument")
    }

    func foo() {
        barNameChanged()
    }
}

编译器不允许覆盖 class 之外的函数的原因是什么?

干杯,丹尼尔

目前,Swift编译器无法区分同名的方法和全局函数,无论重载如何。

解决办法是在全局函数前加上模块名,例如

func bar() { }

class ClassA {
    func bar(anything: String) {}
    func foo() { Module.bar() }
}