2014-06-05 14 views
63

In Swift-Programmierung habe ich einige Fragezeichen mit Objekten gefunden.Was bedeutet das Fragezeichen? in schnell?

var window: UIWindow? 

Kann jemand den Gebrauch davon erklären?

+0

warum downvote ???? – Rajneesh071

+9

Ich habe nicht downvote, aber warum nicht Referenz für solch eine grundlegende Frage überprüfen? – Vladimir

+1

Sie können den iBook-Guide von der Apple-Entwickler-Website herunterladen. Es ist klar angegeben, wann das Fragezeichen "?" in Swift. – Angelo

Antwort

49

Sie können if und let zusammen verwenden mit Werten zu arbeiten, die fehlen könnten. Diese Werte werden als optionals dargestellt. Ein optional Wert enthält entweder einen Wert oder enthält nil, um anzuzeigen, dass der Wert fehlt. Schreiben Sie ein Fragezeichen (?) Nach dem Typ eines Werts , um den Wert als optional zu markieren.

Wenn der optionale Wert nil ist, lautet die Bedingung false und der Code in geschweifte Klammern wird übersprungen. Andernfalls wird der optionale Wert ausgepackt und der Konstante nach let zugewiesen, wodurch der unverpackte Wert innerhalb des Codeblocks verfügbar gemacht wird.

Auszug aus: Apple Inc. "Die schnelle Programmiersprache." IBooks. https://itun.es/pk/jEUH0.l

Beispiel:

var optionalString: String? = "Hello" 
optionalString == nil 

var optionalName: String? = "John Appleseed" 
var greeting = "Hello!" 
if let name = optionalName { 
    greeting = "Hello, \(name)" 
} 

In diesem Code würde der Ausgang Hello! John Appleseed sein. Und wenn wir den Wert optionalName als nil setzen. Das if bedingte Ergebnis wäre false und Code darin, dass if würde übersprungen werden.

+0

Ich danke Ihnen für Ihre Erklärung. – Raja

15

Fragezeichen nach einem Typ beziehen sich auf Optionals, ein Weg in Swift, mit dem Sie die Möglichkeit anzeigen können, dass ein Wert überhaupt nicht vorhanden sein kann, ohne dass spezielle Konstanten erforderlich sind.

Es wird in den gleichen Situationen verwendet, die Sie in Objective-C explizit return nil verwenden, wenn kein Objekt zurückgegeben wird, oder für Werte, die keine Objekte sind, Konstanten wie NSNotFound. Optionale bieten eine konsistente Möglichkeit, dies über alle Datentypen hinweg zu erreichen.

aus dem Apple iBook bereitgestellt

Sie verwenden optionals in Situationen, in denen ein Wert nicht vorhanden sein kann. Ein optional sagt:

  • Es ist ein Wert, und es ist gleich x

oder

  • Es ist kein Wert an allen

Hier ist ein Beispiel . Der String-Typ von Swift hat eine Methode namens toInt, , die versucht, einen String-Wert in einen Int-Wert zu konvertieren. Nicht jedoch jeder String kann in eine ganze Zahl umgewandelt werden. Die Zeichenfolge "123" kann in den numerischen Wert 123 konvertiert werden, aber die Zeichenfolge "Hallo, Welt" hat keinen offensichtlichen numerischen Wert, in den konvertiert werden soll.

let possibleNumber = "123" 
let convertedNumber = possibleNumber.toInt() 
// convertedNumber is inferred to be of type "Int?", or "optional Int" 

Da die toInt Methode scheitern könnte, gibt es eine optionale Int, statt eine Int. Ein optionales Int wird als Int? Geschrieben, nicht als Int. Das Fragezeichen gibt an, dass der darin enthaltene Wert optional ist, , was bedeutet, dass es möglicherweise einen Int-Wert enthält oder dass es überhaupt keinen -Wert enthält. (Es kann nichts enthalten sonst, wie ein Bool Wert oder einen String-Wert. Es ist entweder ein Int, oder es ist gar nichts.)

Es gibt einen ganzen Abschnitt auf der Sprachreferenz iBook auf Optionals und sie werden mehrmals im ganzen Buch erwähnt. Sie sollten es sich genau ansehen, da es ein grundlegendes Konzept der Swift-Programmierung ist, das in vielen anderen Sprachen nicht üblich ist.

+0

lassen posString = "123" convertString = posString.Int lassen() convertString Wert vom Typ 'String' hat keine Nummer 'Int' –

1

der optionale Wert des Typs.

Für Beispiel: die optionale Version des Typs Casting-Operator: as?, Mittelwert as Verwendung für den Typ Casting mit möglicherweise optional zu werfen.