哈,是的,这是违反直觉的 . 当您具有通用的第二个参数与未命名的单个通用参数时,这似乎是特定的 .
一些可能的修复:
当然,您在示例中未尝试的一个案例不是命名 x ,而是命名 v :
foo.foo(1, v: "") // prints foo(x: Int, v: T)
或者,如果您抛弃命名参数 v :
class Foo {
func foo(v: T) {
println("foo(v: T)")
}
func foo(x: Int, _ v: T) {
println("foo(x: Int, v: T)")
}
}
let foo = Foo()
foo.foo("") // prints foo(v: T)
foo.foo(1, "") // prints foo(x: Int, v: T)
foo.foo(1, "") // prints foo(x: Int, v: T)
幽默地,这翻转了以前工作过的一个电话:
foo.foo(1, v: "") // prints foo(v: T)
或者,您可以为所有内容强制使用参数名称:
class Foo {
func foo(#v: T) {
println("foo(v: T)")
}
func foo(#x: Int, v: T) {
println("foo(x: Int, v: T)")
}
}
let foo = Foo()
foo.foo(v: "") // prints foo(v: T)
foo.foo(x: 1, v: "") // prints foo(x: Int, v: T)
foo.foo(x: 1, v: "") // prints foo(x: Int, v: T)
foo.foo(x: 1, v: "") // prints foo(x: Int, v: T)