我对函数重载解析与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
打印到控制台。任何人都可以解释为什么为非闭包参数选择更具体的重载而不是闭包,或者这是一个编译器错误?
答案 0 :(得分:1)
这可能是由于闭包参数的默认“转义”行为发生了变化。
如果您将特定功能更改为:
func f(_ a:@escaping (Int)->Int)
{
print("Narrow")
}
它将按预期打印“Narrow”(这可能与其他几个更明显的地方相同的变化)