Types facultatifs Swift


Type facultatif de Swift, utilisé pour gérer les valeurs manquantes. Facultatif signifie "il y a une valeur là-bas et elle est égale à x" ou "il n'y a pas de valeur là-bas".

Le langage Swfit définit le suffixe ? En raccourci pour le type nommé Facultatif, en d'autres termes, les deux déclarations suivantes sont équivalentes :

var optionalInteger: Int?
var optionalInteger: Optional<Int>

Dans les deux cas, la variable facultativeInteger est un type entier facultatif. Notez qu'entre les types et ? Il n'y a aucun espace entre eux.

Facultatif est une énumération avec deux cas, Aucun et Certains(T), utilisée pour indiquer qu'il peut y avoir ou non une valeur. Tout type peut être explicitement déclaré comme (ou implicitement converti en) un type facultatif. Lorsque vous déclarez un type facultatif, assurez-vous d'utiliser des parenthèses ? Une portée appropriée pour l’opérateur. Par exemple, pour déclarer un tableau d'entiers facultatif, vous devez l'écrire sous la forme (Int[])?; si vous l'écrivez sous la forme Int[]?, une erreur sera signalée.

Lorsque vous déclarez une variable facultative ou une propriété facultative sans fournir de valeur initiale, sa valeur par défaut sera nulle.

Les options facultatives suivent le protocole LogicValue et peuvent donc apparaître dans un environnement booléen. Dans ce cas, si le type facultatif T? contient une valeur de type T (c'est-à-dire que sa valeur est Optionnel.Some(T)), le type facultatif est égal à vrai, sinon il est faux.

Si une instance d'un type facultatif contient une valeur, vous pouvez utiliser l'opérateur postfix ! Pour accéder à cette valeur, ressemblez à ceci :

optionalInteger = 42
optionalInteger! // 42

Utilisez l'opérateur ! La récupération d'une variable facultative avec une valeur nulle provoquera une erreur d'exécution.

Vous pouvez effectuer de manière sélective des opérations sur des expressions facultatives en utilisant le chaînage facultatif et la liaison facultative. Si la valeur est nulle, aucune opération ne sera effectuée et aucune erreur d'exécution ne sera signalée.

Examinons en détail l'exemple suivant pour comprendre l'application des types facultatifs dans Swift :

import Cocoa

var myString:String? = nil

if myString != nil {
    print(myString)
}else{
    print("字符串为 nil")
}

Le résultat de l'exécution du programme ci-dessus est :

字符串为 nil

Le Le type facultatif est similaire à Objective - La valeur nulle des pointeurs en C, mais nil n'est utile que pour les classes, tandis que les types facultatifs sont disponibles pour tous les types et sont plus sûrs.


Forcer l'analyse

Une fois que vous êtes sûr que le type facultatif contient une valeur, vous pouvez ajouter un point d'exclamation (!) après le nom facultatif pour obtenir la valeur. Ce point d'exclamation signifie "Je sais que cette valeur facultative a une valeur, veuillez l'utiliser." C'est ce qu'on appelle le déballage forcé des valeurs facultatives.

Les exemples sont les suivants :

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if myString != nil {
   print(myString)
}else{
   print("myString 值为 nil")
}

Le résultat de l'exécution du programme ci-dessus est :

Optional("Hello, Swift!")

Analyse forcée des valeurs facultatives, à l'aide d'un point d'exclamation (!) :

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if myString != nil {
   // 强制解析
   print( myString! )
}else{
   print("myString 值为 nil")
}

Le programme ci-dessus Le résultat de l'exécution est :

Hello, Swift!

Remarque :
Utiliser ! pour obtenir une valeur facultative inexistante provoquera une erreur d'exécution. Avant d'utiliser ! pour forcer l'analyse d'une valeur, assurez-vous que l'option contient une valeur autre que nil.


Analyse automatique

Vous pouvez remplacer le point d'interrogation (?) par un point d'exclamation (!) lors de la déclaration d'une variable facultative. De cette façon, la variable facultative n'a pas besoin d'ajouter un point d'exclamation (!) pour obtenir la valeur lors de son utilisation, elle sera automatiquement résolue.

L'exemple est le suivant :

import Cocoa

var myString:String!

myString = "Hello, Swift!"

if myString != nil {
   print(myString)
}else{
   print("myString 值为 nil")
}

Le résultat de l'exécution du programme ci-dessus est :

Hello, Swift!

Liaison facultative

Utilisez la liaison facultative pour déterminer si le type facultatif contient une valeur. Si c'est le cas, attribuez la valeur à une constante ou une variable temporaire. La liaison facultative peut être utilisée dans les instructions if et while pour évaluer les valeurs facultatives et attribuer la valeur à une constante ou une variable.

Écrivez une liaison facultative dans une instruction if comme celle-ci :

if let constantName = someOptional {
    statements
}

Regardons un exemple simple de liaison facultative :

import Cocoa

var myString:String?

myString = "Hello, Swift!"

if let yourString = myString {
   print("你的字符串值为 - \(yourString)")
}else{
   print("你的字符串没有值")
}

Le programme ci-dessus Le résultat de l'exécution est :

你的字符串值为 - Hello, Swift!