** «Cast» ** fait référence au traitement des variables et des constantes comme des types plus spécifiques et à usage général. Par exemple, cela signifie traiter une variable qui était «Tout type» comme «Type chaîne», et inversement traiter «Type chaîne» comme «Tout type».
Il existe deux types de distribution, «upcast» et «downcast». La différence entre une diffusion ascendante et descendante est de savoir si elle est traitée comme un type plus général ou un type concret.
Utilisez upcast
pour le traiter comme une valeur plus générale (groupe plus large).
Utilisez as
lorsque vous traitez avec des upcasts. Maintenant écrivons le code.
.swift
let string: String = "sample" //Type de chaîne
let any: Any = string as Any //Upcast du type String vers Any type
De cette façon ** la valeur que vous voulez mettre à jour en tant que type
** à upcast
Vous pouvez upcast en écrivant dans le format.
«Downcast» signifie le traiter comme un type plus spécifique. Ce n'est pas toujours le cas avec les downcasts. Inclut la possibilité d'échec. Alors, comprenons que la grammaire est aussi une prémisse incluant l'échec.
Il y a deux façons d'écrire un downcast, en utilisant «as? Or as!».
Maintenant écrivons le code. La façon d'écrire en utilisant «as?» Est la suivante.
.swift
let any: Any = "sample" as Any
let string = any as? String //Optional("sample")
let int = any as? Int //nil
Tente de downcast vers le type Int à la ligne 3 de l'exemple ci-dessus, mais échoue car "sample" ne peut pas être de type Int. Dans ce cas, la valeur est nulle.
La caractéristique de as? Est-ce qu'il devient nul quand il échoue de cette manière. Parallèlement à cela, si vous regardez la deuxième ligne, il s'agit d'un downcast réussi vers le type String, mais la valeur est un type facultatif du type String. Cela peut échouer, le résultat est donc facultatif. (Le type facultatif signifie autoriser zéro en un mot)
Downcasting en utilisant as? De cette manière, le résultat sera nul si le résultat est facultatif et échoue.
① Le résultat sera un type facultatif
② En cas d'échec, le résultat sera nul.
Le downcast utilisant «as!» S'écrit comme suit.
.swift
let any: Any = "sample" as Any
let string = any as! String //"sample"
let int = any as! Int //Erreur d'exécution
La méthode d'écriture elle-même n'est pas si différente du cas de as?, Mais le résultat est différent.
Si la deuxième ligne est comme?, Le type facultatif est maintenant le type String. En outre, il existe une erreur d'exécution sur la troisième ligne.
Pour ceux qui connaissent le type optionnel, il a peut-être été grossièrement considéré, mais lors de l'utilisation de as!, Le résultat est déballé de force, et au lieu de ne pas devenir le type optionnel, à l'exécution s'il échoue. Une erreur se produira et l'application plantera. ** Downcasting en utilisant as! Est appelé casting forcé. ** **
① Le résultat n'est pas facultatif
(2) En cas d'échec, une erreur d'exécution se produit.
J'ai fait une méthode downcast en utilisant «as?» Et «as!».
Au lieu d'être en sécurité, vous devez écrire ce qu'il faut faire en cas d'échec. D'autre part, as! Risque une erreur à l'exécution au lieu d'avoir à écrire quoi faire en cas d'échec.
On peut dire que les deux ont des avantages et des inconvénients, mais personnellement, je pense qu'il vaut mieux utiliser comme?, Qui est fondamentalement sûr.
En tant que motif dangereux, j'ai essayé d'appuyer sur [Fix]
et cela a été résolu, donc ça va! C'est un modèle qui provoque une erreur d'exécution lors de son exécution. Si vous avez lu jusqu'ici, vous comprendrez probablement pourquoi ce n'est pas bon, mais sachez que l'utilisation de as! De cette façon, a tendance à entraîner un code instable.
Je voudrais vous présenter les articles auxquels j'ai fait référence lors de la publication de cet article. https://fukatsu.tech/swift-cast
Cette fois, j'ai résumé sur le "type cast". Le typage est une partie basique de swift, mais je pense qu'il est nécessaire de le comprendre clairement car il est facile de rencontrer des erreurs inattendues si vous le gérez sans le comprendre, ou de tomber dans l'état de le décrire pour le moment.
Donc, cette fois, afin d'approfondir mon propre apprentissage, je l'ai organisé et posté en me référant à d'autres articles. Veuillez vous y référer!
Recommended Posts