Optionnels Swift
Le type optionnel (Optional) de Swift est utilisé pour gérer les valeurs manquantes. Optionnel signifie « il y a une valeur, et elle est égale à x » ou « il n’y a pas de valeur ».
Le langage Swift définit le suffixe ? comme abréviation du type nommé Optional. En d’autres termes, les deux déclarations suivantes sont équivalentes :
var optionalInteger: Int? var optionalInteger: Optional<Int>
Dans les deux cas, la variable optionalInteger est de type entier optionnel. Notez qu’entre le type et?il n’y a pas d’espace.
Optional est une énumération avec deux cas, None et Some(T), utilisée pour représenter une valeur qui peut exister ou non. Tout type peut être explicitement déclaré (ou implicitement converti) comme type optionnel. Lors de la déclaration d’un type optionnel, veillez à utiliser des parenthèses pour donner à l’opérateur ? une portée appropriée. Par exemple, pour déclarer un tableau d’entiers optionnel, vous devez écrire (Int[])? ; écrire Int[]? provoquera une erreur.
Lorsque vous déclarez une variable optionnelle ou une propriété optionnelle sans fournir de valeur initiale, sa valeur par défaut est nil.
Les optionnels se conforment au protocole LogicValue, ils peuvent donc apparaître dans un contexte booléen. Dans ce cas, si un type optionnel T? contient une valeur de type T (c’est-à-dire que sa valeur est Optional.Some(T)), l’optionnel est égal à true ; sinon, il est false.
Si une instance d’un type optionnel contient une valeur, vous pouvez utiliser l’opérateur postfixe ! pour accéder à cette valeur, comme montré ci-dessous :
optionalInteger = 42 optionalInteger! // 42
Utiliser l’opérateur ! pour accéder à une variable optionnelle dont la valeur est nil provoquera une erreur d’exécution.
Vous pouvez utiliser le chaînage optionnel et la liaison optionnelle pour effectuer sélectivement des opérations sur des expressions optionnelles. Si la valeur est nil, aucune opération n’est effectuée et aucune erreur d’exécution ne se produit.
Examinons en détail les exemples suivants pour comprendre l’application des types optionnels en Swift :
import Cocoa
var myString:String? = nil
if myString != nil {
print(myString)
}else{
print("字符串为 nil")
}
La sortie du programme ci-dessus est :
字符串为 nil
Les types optionnels sont similaires à la valeur nil des pointeurs en Objective-C, mais nil n’est utile que pour les classes, tandis que les types optionnels sont disponibles pour tous les types et sont plus sûrs.
Déballage forcé
Lorsque vous êtes sûr que le type optionnel contient réellement une valeur, vous pouvez ajouter un point d’exclamation (!) après le nom de l’optionnel pour accéder à la valeur. Ce point d’exclamation signifie « je sais que cet optionnel a une valeur, veuillez l’utiliser ». C’est ce qu’on appelle le déballage forcé d’une valeur optionnelle.
Exemple ci-dessous :
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值为 nil")
}
La sortie du programme ci-dessus est :
Optional("Hello, Swift!")
Forcer le déballage d’une valeur optionnelle à l’aide du point d’exclamation (!) :
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if myString != nil {
// 强制解析
print( myString! )
}else{
print("myString 值为 nil")
}
La sortie du programme ci-dessus est :
Hello, Swift!
Remarque :
Utilisation!accéder à une valeur optionnelle inexistante provoquera une erreur d'exécution. Utiliser!avant de forcer le déballage d'une valeur, assurez-vous que l'optionnel contient une valeur non-nilvaleur.
Déballage automatique
Vous pouvez utiliser un point d'exclamation (!) au lieu d'un point d'interrogation (?) lors de la déclaration d'une variable optionnelle. Ainsi, la variable optionnelle n'a pas besoin d'ajouter un point d'exclamation (!) pour accéder à la valeur lorsqu'elle est utilisée ; elle sera déballée automatiquement.
Exemple ci-dessous :
import Cocoa
var myString:String!
myString = "Hello, Swift!"
if myString != nil {
print(myString)
}else{
print("myString 值为 nil")
}
La sortie du programme ci-dessus est :
Hello, Swift!
Liaison optionnelle
Utilisez la liaison optionnelle pour déterminer si un type optionnel contient une valeur. S'il contient une valeur, affectez cette valeur à une constante ou variable temporaire. La liaison optionnelle peut être utilisée dans les instructions if et while pour vérifier la valeur d'un type optionnel et affecter la valeur à une constante ou variable.
Écrivez une liaison optionnelle dans une instruction if comme suit :
if let constantName = someOptional {
statements
}
Regardons un exemple simple de liaison optionnelle :
import Cocoa
var myString:String?
myString = "Hello, Swift!"
if let yourString = myString {
print("你的字符串值为 - \(yourString)")
}else{
print("你的字符串没有值")
}
La sortie du programme ci-dessus est :
你的字符串值为 - Hello, Swift!Autres extensions