2014-12-07 15 views
9

Z tego co wiem, funkcje Swift mają domyślnie nienazwane parametry, ale metody Swift nie (z wyjątkiem pierwszego parametru). Na przykład, biorąc pod uwagę następujące definicje:Wiele nienazwanych parametrów w metodach Swift

func foo(a: Int, b: Int) -> Int { 
    return a + b 
} 

class MyClass { 
    func bar(a: Int, b: Int) -> Int { 
     return a + b 
    } 
} 

Muszę zadzwonić foo z nienazwanych parametrów:

foo(10, 20) // fine 

foo(a: 10, 20) // error 
foo(10, b: 20) // error 
foo(a: 10, b: 20) // error 

i muszę zadzwonić bar z pierwszym argumentem nienazwanego i drugi argument o nazwie:

MyClass().bar(10, b: 20) // fine 

MyClass().bar(10, 20) // error 
MyClass().bar(a: 10, b: 20) // error 
MyClass().bar(a: 10, 20) // error 

Rozumiem, że mogę wprowadzić dowolny nienazwany parametr o nazwie przy użyciu symbolu #, ale moje pytanie brzmi: Czy jest jakiś sposób, aby uczynić nienazwane obie argumenty na bar?

Innymi słowy, Chciałbym zadeklarować bar w taki sposób, że mogę nazwać go jak zwykła funkcja:

MyClass().bar(10, 20) 

Jest to możliwe w Swift? Jeśli tak to jak?

Odpowiedz

17

Tak, można poprzedzić drugą nazwę parametru z _ mają być anonimowy:

class MyClass { 
    func bar(a: Int, _ b: Int) -> Int { 
     return a + b 
    } 
} 
+0

Dziękujemy! Właśnie tego potrzebowałem. – SelectricSimian

+0

Uwaga: W Swift 4, musisz wstawić "_" również przed pierwszym argumentem. klasy MojaKlasa { pasek func (a: INT _ B: INT) -> int { powrotu a + b } } var g = MojaKlasa() g.bar (3, 4) błąd praca ręczna .swift: 88: 7: error: brak etykiety argumentu "a" w wywołaniu –

Powiązane problemy