Ciekawe to. Nie sądzę, żeby było to możliwe bez robienia czegoś na wzór sugestii @ marcos. Problem ty to możesz „cast away” nazwiska w krotek:
let named_pair = (s: "hello", i: 1)
named_pair.s // hello
let anon_pair = named_pair as (String,Int)
// or anon_pair: (String,Int) = named_pair, if you prefer
anon_pair.s // no such member 's'
Teraz załóżmy zdefiniować dwie funkcje identyczne z wyjątkiem jednego nazwał argumenty
func f(s: String, i: Int) { println("_: \(s)") }
func f(#s: String, #i: Int) { println("s: \(s)") }
Można połączyć go poprzez krotki z imieniem vs nienazwanych argumenty
f(named_pair) // prints s: hello
f(anon_pair) // prints _: hello
// but if you try to call a named argument function with unnamed tuples:
func g(# s: String, # i: Int) { println("s: \(s)") }
g(anon_pair) // compiler error
let h = g
h(anon_pair) // compiler error
h(named_pair) // works
Ale ponieważ można wyrzucać tych nazw można to zrobić:
// compiles and runs just fine...
(g as (String,Int)->())(anon_pair)
let k: (String,Int)->() = g
// as does this
k(anon_pair)
I ta możliwość zrobienia tego oznacza, że nie można użyć typu do rozróżnienia funkcji przeciążonej tylko nazwami argumentów, o ile mogę to stwierdzić.
Daj mi znać, jeśli moja odpowiedź ci pomogła. Mogę spróbować pomóc więcej –