Swift 3 闭包重载解析

2024-03-08

我对 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, not Wide,打印到控制台。谁能解释为什么为非闭包参数选择更具体的重载而不是为闭包​​选择更具体的重载,或者这是一个编译器错误?

Swift 2 表现出了预期的行为。


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

如果将特定函数更改为:

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

它将按预期打印“Narrow”(这与您可能必须在其他几个更明显的地方进行的更改相同)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Swift 3 闭包重载解析 的相关文章

随机推荐