为什么具有相同名称但外部参数名称不同的多个func会产生编译错误?

时间:2016-12-17 15:44:56

标签: swift xcode swift3 xcode8

这两个添加方法重载(名称相同但外部参数名称不同):

func add (x:Int, y:Int) -> Int {
    return x+y
}

add(x: 1,y: 2)
add(x: 4,y: 2)

func add (_ x:Int, _ y:Int) -> Int {
    return x+y
}

add(4,5) // Delete this, and the error goes away

func add (addend1 x:Double, addend2 y:Double) -> Double {
    return x + y
}

add(addend1: 1.1, addend2: 2.2) // But the error is flagged here
add(addend1: 3.3, addend2: 4.4) // and here

Xcode 8.2 Beta(8C30a)Playground标记最后两行:

表达类型' Int'在没有更多背景的情况下是模棱两可的

这不应该含糊不清(我认为),因为外部参数名称都是不同的。更奇怪的是,这被标记为Swift编译错误,但它们在表达式区域中评估为3.3和7.7。所以它正在编译,但是......没有编译?

这是一个Xcode错误吗?

1 个答案:

答案 0 :(得分:1)

它看起来像编译器错误。重新排列代码修复了问题:

func add (x:Int, y:Int) -> Int {
    return x+y
}

func add (_ x:Int, _ y:Int) -> Int {
    return x+y
}

func add (addend1 x:Double, addend2 y:Double) -> Double {
    return x + y
}

add(x: 1,y: 2)
add(x: 4,y: 2)

add(4,5)

add(addend1: 1.1, addend2: 2.2)
add(addend1: 3.3, addend2: 4.4)

我鼓励您向Apple提交bug report