覆盖其类外的函数

时间:2015-06-03 02:14:13

标签: swift override

我遇到了一种奇怪的行为。以下代码产生编译错误,我在其中调用bar(),并显示消息:“缺少参数#1调用的参数”

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()
    }
}

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

干杯,丹尼尔

1 个答案:

答案 0 :(得分:3)

目前,Swift编译器无法区分方法和具有相同名称的全局函数,无论是否过载。

解决方案是在全局函数前加上模块名称,例如

func bar() { }

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