Swift accorde une grande importance à la sécurité des types de véhicules. L'ensemble du langage Swift a été conçu dans un souci de sécurité. C'est l'une des caractéristiques de Swift et vous devriez l'accueillir à bras ouverts. Elle facilitera le développement d'un code propre et lisible et contribuera à éviter le plantage de votre application.
Toutes les options en Swift sont délimitées par le symbole ?
symbole. En réglant le ?
après le nom du type dans lequel vous déclarez que vous êtes optionnel, vous êtes essentiellement moulage ce pas comme le type dans lequel est avant le ?
mais plutôt comme le en option type.
Note : Une variable ou un type Int
es no la même chose que Int?
. Ce sont deux types différents qui ne peuvent pas être opérés l'un sur l'autre.
Utilisation de l'option
var myString: String?
myString = "foobar"
Cela ne no signifie que vous travaillez avec un type de String
. Cela signifie que vous travaillez avec un type de String?
(Chaîne facultative, ou Chaîne facultative). En fait, chaque fois que vous essayez de
print(myString)
au moment de l'exécution, la console de débogage affichera Optional("foobar")
. Le " Optional()
La partie " " indique que cette variable peut avoir ou non une valeur au moment de l'exécution, mais qu'il se trouve qu'elle contient actuellement la chaîne "foobar". Ce " Optional()
L'indication " " demeurera à moins que vous ne fassiez ce que l'on appelle "déballer" la valeur optionnelle.
Déballage un optionnel signifie que vous coulez maintenant ce type comme non-optionnel. Cela va générer un nouveau type et affecter la valeur qui résidait dans cette option au nouveau type non-optionnel. De cette façon, vous pouvez effectuer des opérations sur cette variable, car le compilateur a garanti qu'elle aurait une valeur solide.
Le déballage conditionnel vérifiera si la valeur de l'option est nil
ou non. Si ce n'est pas le cas nil
il y aura une variable constante nouvellement créée à laquelle sera attribuée la valeur et non emballé dans la constante non optionnelle. Et à partir de là, vous pouvez utiliser en toute sécurité le non-optionnel dans la constante if
bloc.
Remarque : vous pouvez donner à votre constante à déballage conditionnel le même nom que la variable facultative que vous déballer.
if let myString = myString {
print(myString)
// will print "foobar"
}
Le déballage conditionnel des optionnels est le moyen le plus propre d'accéder à la valeur d'un optionnel, car s'il contient une valeur nulle, tout ce qui se trouve dans le bloc if let ne sera pas exécuté. Bien sûr, comme toute instruction if, vous pouvez inclure un bloc else
if let myString = myString {
print(myString)
// will print "foobar"
}
else {
print("No value")
}
Déballage forcé se fait en employant ce que l'on appelle le !
("bang"). Cette méthode est moins sûre mais permet tout de même à votre code de compiler. Cependant, chaque fois que vous utilisez l'opérateur bang, vous devez être certain à 1000% que votre variable contient bien une valeur solide avant de la déballer de force.
var myString: String?
myString = "foobar"
print(myString!)
Ce qui précède est un code Swift tout à fait valable. Il imprime la valeur de myString
qui a été défini comme "foobar". L'utilisateur verrait foobar
imprimé dans la console et c'est à peu près tout. Mais supposons que la valeur n'a jamais été définie :
var myString: String?
print(myString!)
Nous avons maintenant une situation différente sur les bras. Contrairement à l'Objective-C, chaque fois que l'on tente de déballer de force une option, et que l'option n'a pas été définie et est nil
si vous essayez de déballer l'option pour voir ce qu'il y a à l'intérieur, votre application se plantera.
Déballage avec moulage de type . Comme nous l'avons dit précédemment, pendant que vous êtes unwrapping
l'optionnel que vous projetez en fait vers un type non optionnel, vous pouvez également projeter le non-optionnel vers un type différent. Par exemple :
var something: Any?
Quelque part dans notre code, la variable something
sera défini avec une certaine valeur. Peut-être que nous utilisons des génériques ou peut-être qu'il y a une autre logique qui se passe et qui provoque ce changement. Donc, plus tard dans notre code, nous voulons utiliser something
tout en étant capable de le traiter différemment s'il s'agit d'un autre type. Dans ce cas, vous voudrez utiliser l'option as
mot-clé pour le déterminer :
Note : Le as
L'opérateur est la façon dont vous tapez cast en Swift.
// Conditionally
if let thing = something as? Int {
print(thing) // 0
}
// Optionally
let thing = something as? Int
print(thing) // Optional(0)
// Forcibly
let thing = something as! Int
print(thing) // 0, if no exception is raised
Remarquez la différence entre les deux as
mots-clés. Comme précédemment, lorsque nous avons déballé de force une option, nous avons utilisé le mot-clé !
opérateur de bang pour le faire. Ici, vous ferez la même chose, mais au lieu de le présenter comme un simple non-optionnel, vous le présenterez également comme un Int
. Et il doit être capable d'être abattu comme Int
sinon, comme utiliser l'opérateur bang lorsque la valeur est nil
votre application se plantera.
Et pour pouvoir utiliser ces variables dans une opération mathématique quelconque, elles doivent être déballées.
Par exemple, dans Swift, seuls les types de données numériques valides du même type peuvent être exploités les uns sur les autres. Lorsque vous convertissez un type avec l'attribut as!
vous forcez la baisse de cette variable comme si vous étiez certains il est de ce type, donc sûr d'opérer et de ne pas planter votre application. Cela ne pose pas de problème tant que la variable est effectivement du même type que celui auquel elle est affectée, sinon vous vous retrouverez avec un problème sur les bras.
Néanmoins, le casting avec as!
permettra à votre code de compiler. En coulant avec un as?
c'est une autre histoire. En effet, as?
déclare que votre Int
comme un type de données complètement différent.
Maintenant, c'est Optional(0)
Et si vous avez déjà essayé de faire vos devoirs en écrivant quelque chose comme
1 + Optional(1) = 2
Votre professeur de mathématiques vous aurait probablement donné un "F". Pareil pour Swift. Sauf que Swift préfère ne pas compiler du tout plutôt que de vous donner une note. Parce qu'à la fin de la journée, l'option peut en fait être nulle. .
Safety First Kids.
1 votes
La réponse de Cezary est parfaite. De plus, il existe un excellent livre d'introduction à Swift disponible pour GRATUIT sur iBooks
0 votes
@DanielStormApps Cet iBook est une version portable du tutoriel lié dans ma question :)