disfavoredOverload - ShenYj/ShenYj.github.io GitHub Wiki
func sameName() {
...
}
func sameName(parameter: Int) {
...
}
sameName() // no parameter => calls sameName()
sameName(parameter: 1) // parameter => calls sameName(parameter:)
以上示例代码中根据参数可以清晰的判断函数调用的预期行为
func sameName() {
...
}
func sameName(value: Int = 5) {
...
}
这段示例中,第一个函数没有参数,第二个函数有一个带有默认值的参数
sameName() // no parameter passed, both declarations match => ??
此时变回产生歧义
同时在函数重载时,也可能存在歧义
func sameName(_ number: Int) {
...
}
func sameName<N: Numeric>(_ number: N) {
...
}
以及以下情况
func sameName(_ number: Int) {
...
}
func sameName(_ numbers: Int...) {
...
}
Swift 通过 @_disfavoredOverload
这个attribute ,让我们在这种模棱两可的情况下来预测Swift的行为
属性前面的下划线意味着这个Swift功能还没有经过Swift Evolution。自行决定继续。
使用 @_disfavoredOverload
属性,这将降低相关函数的排名,使不太具体的函数胜过更具体的函数。
@_disfavoredOverload
func sameName() { ... }
func sameName(value: Int = 5) { ... }
使用此更新的声明,调用sameName()
将匹配第二个函数。