Une option dans Swift est une variable qui peut contenir une valeur ou sans valeur. Options sont écrits en ajoutant un ?
le type:
var myOptionalString:String? = "Hello"
De "L'essentiel" dans le Langage de Programmation Swift:
Swift a également introduit en option types, la poignée de l'absence de valeur. Options-dire "il y a une valeur, et il est égal à x" ou "il n'y a pas une valeur à tous". Options sont similaires à l'aide de nul avec les pointeurs en Objective-C, mais ils travaillent pour n'importe quel type, pas seulement les classes. Options sont plus sûrs et plus expressive que nul pointeurs en Objective-C, et sont au cœur de bon nombre de Swift fonctionnalités plus puissantes.
Options sont un exemple du fait que la Swift est un type de langage sûr. Swift vous permet d'être clair sur les types de valeurs de votre code peut fonctionner avec. Si une partie de votre code attend une Chaîne, le type de sécurité vous empêche de passer à un Int par erreur. Cela permet d'attraper et de corriger les erreurs le plus tôt possible dans le processus de développement.
Certains endroits, les options sont utiles:
- Lorsqu'une propriété peut être là ou pas là, comme
middleName
ou spouse
en Person
classe
- Lorsqu'une méthode peut retourner une valeur ou rien, comme à la recherche d'un match dans un tableau
- Lorsqu'une méthode peut retourner un résultat ou obtenez un message d'erreur et renvoie rien
- Délégué propriétés (qui ne doivent pas toujours être ensemble)
- Pour
weak
propriétés dans les classes. La chose à point peut être réglé nil
- Pour une ressource importante qui pourrait être libéré pour récupérer de la mémoire
Vous pouvez utiliser une option en tant que Boolean
en if
ou while
déclaration. Voici un exemple de création d'une option, puis vérification de son existence:
var myString:String? = "Hello"
if myString {
println(myString)
}
Si vous essayez de le faire à l'aide d'un non-type facultatif, il va donner une erreur de compilateur: "Type" Chaîne "n'est pas conforme à un protocole de LogicValue'"
var myOtherString:String = "Hello"
if myOtherString { // Error
println(myOtherString)
}
Aussi, si vous tentez de définir un non-facultatif nil
vous obtenez le message d'erreur "impossible de trouver une surcharge pour '__conversion "qui accepte les arguments fournis":
var myOtherString:String = nil // Error
Si une variable est déclarée comme une option, il peut être nil
. En fait, toutes les options de démarrage d'une valeur de nil
jusqu'à ce qu'ils sont définis à quelque chose:
var possibleString:String? = "Hello"
possibleString = nil
if possibleString {
println("It's not nil")
}
Voici une façon d'utiliser les options:
var nameString:String? = "Zed" // could also be nil
if nameString {
println("\(nameString)'s alive")
} else {
println("Zed's dead")
}
Vous pouvez utiliser les options pour la vérification de l'existence d'une valeur dans un dictionnaire:
let users = [ "sjobs" : "Steve Jobs", "bgates" : "Bill Gates"]
let steve: String? = users["sjobs"]
if steve { // if steve != nil
println("\(steve) is in the dictionary")
}
Il y a un raccourci pour vérifier si une valeur existe, de faire quelque chose avec elle. Vous pouvez convertir de ce style:
let possibleName: String? = users["ballmer"]
if possibleName {
let foundName = possibleName! // Force out value with unwrap operator (!)
println("Name: \(foundName)")
}
...de cette abréviation, qui dit "Si possibleName
a une valeur, déballez-le et fixez sa valeur à foundName
.
if let foundName = possibleName {
println("Name: \(foundName)")
}
Vous utilisez un point d'exclamation "!" déballer le facultatif. Vous ne pouvez pas utiliser une option pour beaucoup (à l'exception de la vérification de sa nilness) jusqu'à ce qu'il est déballé. Notez que de déballer une option que l' nil
va provoquer un plantage. Toujours vérifier qu'une valeur existe avant de déballer:
// Crash: fatal error: Can't unwrap Optional.
let name = possibleName!
Plus de la Swift guide:
Dans une instruction if, le conditionnel doit être une expression Booléenne, ce qui signifie que le code tel que if score { ... }
est une erreur, pas une comparaison implicite à zéro.
Vous pouvez utiliser si et de les laisser ensemble, à collaborer avec les valeurs que peut-être manquant. Ces valeurs sont représentées comme des options. Une valeur facultative contient une valeur ou contient nul pour indiquer que la valeur est manquante. Écrire un point d'interrogation (?) après le type d'une valeur de marque de la valeur de l'option.
Il peut être utile de voir la même chose en Objective-C:
NSString *myString = @"Hello";
if (myString) {
NSLog(@"%@", myString);
}
Objective-C est plus indulgent sur ce qu'il va permettre de dire "faux" (NO
, 0
, nil
). Swift est plus restrictive et veut un booléen (ou quelque chose qui "déballe" à un booléen). En utilisant des options se débarrasse aussi de la nécessité pour les trucs comme NSNotFound
et à l'aide de -1
pour représenter faux.
Plus de ressources:
Le Guide De Programmation Swift
Options de Swift (Moyen)
La WWDC Session 402 "présentation de Swift" (qui commence autour de 14:15)
Pour terminer, voici un poème à partir de 1899 sur les options:
Hier, lors de l'escalier
J'ai rencontré un homme qui n'était pas là
Il n'y a pas de nouveau aujourd'hui
Je souhaite, j'aurais aimé qu'il aille
Antigonish