[Swift] J'ai déjà beaucoup d'informations, mais j'ai essayé de résumer le casting (comme, comme!, Comme?) À ma manière.

Qu'est-ce qu'une fonte de caractères?

** «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».

Type de fonte

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.

Qu'est-ce que upcast

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.

Qu'est-ce qui est abattu

«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!».

Downcast en utilisant comme?

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.

Résumé downcast en utilisant comme?

① Le résultat sera un type facultatif
② En cas d'échec, le résultat sera nul.

Downcast en utilisant comme!

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é. ** **

Résumé downcast en utilisant comme?

① Le résultat n'est pas facultatif
(2) En cas d'échec, une erreur d'exécution se produit.

Dois-je utiliser comme? Ou comme!

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.

Sommaire

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

[Swift] J'ai déjà beaucoup d'informations, mais j'ai essayé de résumer le casting (comme, comme!, Comme?) À ma manière.
J'ai essayé de résumer l'orientation de l'objet à ma manière.
Un super débutant a terminé le livre d'introduction du printemps, je vais donc le résumer à ma manière
J'ai essayé de résumer les bases de kotlin et java
J'ai brièvement résumé la grammaire de base de Ruby
J'ai créé un client RESAS-API en Java
Lorsque je suis passé à IntelliJ, il y avait une grande différence dans l'encodage du fichier de propriétés.
[Pour les débutants Swift] J'ai essayé de résumer le cycle de mise en page désordonné de ViewController et View
J'ai essayé d'illuminer le sapin de Noël dans un jeu de la vie
J'ai essayé de résumer les méthodes de Java String et StringBuilder
J'ai essayé de créer un exemple de programme en utilisant le problème du spécialiste des bases de données dans la conception pilotée par domaine
J'ai essayé de créer une classe parent d'objet de valeur dans Ruby
J'ai essayé de résumer les points clés de la conception et du développement de gRPC
J'ai essayé d'utiliser pleinement le cœur du processeur avec Ruby
[Ruby] J'ai essayé de résumer les méthodes fréquentes dans paiza
[Ruby] J'ai essayé de résumer les méthodes fréquentes avec paiza ②
J'ai essayé de résumer les méthodes utilisées
J'ai essayé de résumer l'API Stream
Puisque le test unitaire de la PJ dont j'étais en charge était une photo d'enfer, je publierai mon propre guide (?)
Ce que j'ai essayé quand je voulais obtenir tous les champs d'un haricot
Comment obtenir l'ID d'un utilisateur qui s'est authentifié avec Firebase dans Swift
J'ai essayé d'organiser la session en Rails
Je veux trouver la somme de contrôle MD5 d'un fichier en Java et obtenir le résultat sous forme de chaîne de caractères en notation hexadécimale.
[Rails] Je souhaite afficher la destination du lien de link_to dans un onglet séparé
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
J'ai essayé de créer une compétence Clova en Java
J'ai essayé de créer une fonction de connexion avec Java
J'ai essayé d'implémenter la méthode de division mutuelle d'Eugrid en Java
J'ai fini de regarder les roses de Versailles, alors j'ai essayé de reproduire la chanson de fin en Java
J'ai essayé de convertir l'exemple d'application en microservice selon l'idée du livre "Microservice Architecture".
[Rails 6.0, Docker] J'ai essayé de résumer la construction de l'environnement Docker et les commandes nécessaires pour créer un portfolio
J'ai essayé de développer la fonction de cache d'Application Container Cloud Service dans l'environnement local
Une histoire que j'ai réalisé que je devais étudier en premier lieu en tant qu'ingénieur
J'ai essayé d'utiliser le référentiel GitHub comme serveur de bibliothèque
Code du port C avec de nombreux typecasts vers Swift
J'ai essayé JAX-RS et pris note de la procédure
Comment obtenir les informations les plus longues de Twitter à partir du 12/12/2016
J'ai essayé de convertir une chaîne de caractères en un type LocalDate en Java
J'ai essayé de créer un environnement de WSL2 + Docker + VSCode
J'ai essayé d'implémenter une application web pleine de bugs avec Kotlin
J'ai essayé de valider pour unifier comment écrire des balises de hachage
[Controller] Je veux récupérer la valeur numérique d'une colonne spécifique de la base de données (mon mémo)
J'ai essayé d'exprimer les résultats avant et après de la classe Date avec une ligne droite numérique
J'ai créé une application d'apprentissage automatique avec Dash (+ Docker) part2 ~ Façon basique d'écrire Dash ~
Lorsque j'ai essayé d'exécuter mon propre service, il a échoué, alors je l'ai vissé dans le planificateur de tâches