2016-06-12 12 views
-1

Ich möchte eine Int erstellen, die keinen Wert (eine bereits vorhandene Variable) hat. Wenn ich das tue;Int ohne Wert (set int auf keinen Wert)

number = Int() 

dann hat es immer noch den Wert 0. Ich will nichts, einen nicht existenten Wert.

+2

Die einzige Möglichkeit ist ein optionales 'Int?' – vadian

+1

Sie benötigen Optionals: https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/ uid/TP40014097-CH5-ID330 – Moritz

+0

'Var-Nummer: Int?' –

Antwort

9

kann jede Art tatsächlich auf einen leeren Wert aka nil eingestellt werden!

Um eine Variable zu erstellen, die auf nil gesetzt werden kann, müssen Sie den Typnamen explizit mit einem ? oder ! (ich spreche später über den Unterschied) am Ende schreiben.

Zum Beispiel, wenn Sie ein Int wollen, die nil eingestellt werden kann, eine Variable mit dem Namen Typ deklarieren:

var myInt: Int 

und fügen Sie dann ein ?:

var myInt: Int? 

Dann Sie können myInt auf nil setzen, oder welche Werte auch immer Sie wollen:

myInt = nil 
myInt = 0 

Dieser Typ-Name-mit-? Notation ist in Swift als "optionale Typen" bekannt.

Sie können nicht nur optionals in Variablen und Konstanten verwenden, können Sie es auch in Methode/Funktion Signaturen verwenden:

func myUselessFunc(value: Int?) -> Int? { 
    return value 
} 

Okay, so was ist der Unterschied zwischen ! und ??

! verhält sich wie Referenztypen in Java und C#. Und ? ist wie eine sicherere Version von !.

Nehmen wir an, es gibt eine optionale Int namens myInt. Sie möchten auf die description zugreifen.

Wenn myInt als let myInt: Int? erklärt wurden,

myInt?.description 

Wenn myInt erklärt wurden als let myInt: Int!

myInt.description 

Beachten Sie, dass mit dem Fragezeichen, müssen Sie jedes Mal ein Fragezeichen am Ende hinzufügen Sie müssen auf Eigenschaft/Methode von myInt zugreifen. Dies wird als "Auspacken eines optionalen Typs" bezeichnet.

Ein Typ mit dem Suffix ! wird als "implizit nicht eingeschlossener optionaler Typ" bezeichnet.Wenn Sie mit diesen Typen arbeiten, müssen Sie sie nicht auspacken. Wenn jedoch myIntnil ist, wird ein Fehler ausgegeben! Dies passiert nicht mit ? Typen, weil der gesamte Ausdruck nur nil zurückgibt, wenn myIntnil ist.

Das ist nur etwas, das Sie beachten sollten, wenn Sie das erste Mal mit Optionals arbeiten.