Swift 3关闭重载决议

时间:2016-10-01 02:30:42

标签: swift closures overloading swift3 overload-resolution

我对函数重载解析与Swift 3中的闭包感到困惑。

例如,在代码中:

func f<T>(_ a: T) {
    print("Wide")
}

func f(_ a: (Int)->(Int)) {
    print("Narrow")
}

f({(a: Int) -> Int in return a + 1})

我希望将Narrow,而不是Wide打印到控制台。任何人都可以解释为什么为非闭包参数选择更具体的重载而不是闭包,或者这是一个编译器错误?

斯威夫特2表现出预期的行为。

1 个答案:

答案 0 :(得分:1)

这可能是由于闭包参数的默认“转义”行为发生了变化。

如果您将特定功能更改为:

func f(_ a:@escaping (Int)->Int) 
{
    print("Narrow")
}

它将按预期打印“Narrow”(这可能与其他几个更明显的地方相同的变化)