2014-09-28 11 views
7

Powiedzmy, na przykład, masz następujący kod:Swift - Czy etykiety na parametrach konstruktora są opcjonalne?

struct SomeStruct { 
    init (arg1: String, arg2: Int){ 
      // Does Stuff with Variables 
    } 
} 

// Some Point Later 

var str = "fasfsad" 
var integer = 343 
let smth = SomeStruct(arg1: str, arg2: integer) 

Czy jest możliwe aby zmodyfikować struct SomeStruct aby następującą linię kodu prawnej?

let smth = SomeStruct(str, integer) 

Odpowiedz

7

Tak, można dokonać parametry anonimowy za pomocą podkreślenia dla zewnętrznego nazwy parametru:

struct SomeStruct { 
    init (_ arg1: String, _ arg2: Int){ 
      // Does Stuff with Variables 
    } 
} 
+3

Poprawnie, ale Podziel włosy na pierwotne sformułowania pytania: nie powoduje to, że etykiety parametrów * opcjonalne * w witrynie wywołania - powodują, że dzwoniący je omija. Deklaracja funkcji/inicjalizatora określa dokładnie jedną składnię do wywołania tego. Jeśli chcesz udostępnić rozmówcom wiele opcji, zadeklaruj wiele inicjalizatorów. – rickster

+2

To dobra uwaga. Jeśli inicjator jest zdefiniowany w ten sposób, 'SomeStruct (arg1: str, arg2: integer)' nie jest już poprawnym połączeniem. –

3

Oto w jaki sposób można to zrobić:

struct A { 
    var a: String 
    var b: String 

    init(_ a: String,_ b: String) { 
     self.a = a 
     self.b = b 
    } 
} 

var x = A("S", "B") 
Powiązane problemy