2014-09-28 4 views
7

Sagen wir, zum Beispiel, haben Sie den folgenden Code ein:Swift - Machen Sie die Etiketten auf Konstruktor Parameter optional?

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) 

Ist es möglich, die SomeStruct Struktur zu ändern Rechts die folgende Zeile Code zu machen?

let smth = SomeStruct(str, integer) 

Antwort

7

Ja, Sie die Parameter anonym unter Verwendung eines Unterstrichs für den externen Parameternamen vornehmen:

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

Richtig, aber zu gespaltene Haare bei der Formulierung der ursprünglichen Frage: Dies macht keine Parameterbeschriftungen * optional * an der Anrufstelle - es macht es erforderlich, dass der Anrufer sie auslässt. Eine Funktion/Initialisierer-Deklaration spezifiziert genau eine Syntax für den Aufruf. Wenn Sie Anrufern mehrere Optionen bereitstellen möchten, deklarieren Sie mehrere Initialisierer. – rickster

+2

Das ist ein guter Punkt. Wenn der Initialisierer auf diese Weise definiert ist, ist 'SomeStruct (arg1: str, arg2: integer) 'nicht länger ein gültiger Aufruf. –

3

Hier ist, wie Sie dies tun können:

struct A { 
    var a: String 
    var b: String 

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

var x = A("S", "B")