我遇到了一种奇怪的行为。以下代码产生编译错误,我在其中调用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()
}
}
编译器不允许覆盖类外的函数的原因是什么?
干杯,丹尼尔
答案 0 :(得分:3)
目前,Swift编译器无法区分方法和具有相同名称的全局函数,无论是否过载。
解决方案是在全局函数前加上模块名称,例如
func bar() { }
class ClassA {
func bar(anything: String) {}
func foo() { Module.bar() }
}