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()将匹配第二个函数。