[Swift] J'ai pensé à comparer

Ceci est une orthographe des pensées du premier savant, l'auteur, quand il a rencontré pour la première fois «comparer».

Compare ici fait référence à la méthode d'instance de classe String de Swift compare.

Quel est le problème avec la valeur de retour de compare

C'est un "résultat de comparaison". Oui c'est ça.

C'est un débutant qui ne devient pas ... J'étais l'un des leurs. Le Apple Developer Document indique également ** Valeur de retour ** en évidence!

Je trébuche dans un endroit si rudimentaire, mais le processus d'essais et d'erreurs était une bonne étude, alors j'ai décidé de le laisser ici sous forme de sortie.

Ou vous etes-vous rencontrés?

Introduction à Swift Practice 3e édition P53 Fonctionnement avancé par Foundation avec un exemple de code

Ce sera la partie ci-dessus. Je pense qu'il y a beaucoup de débutants qui choisissent ce livre pour apprendre rapidement. Je suis resté coincé quand j'ai vu le code suivant qui est soudainement apparu ci-dessus.

//Exemple de code P53
import Foundation //compare est une méthode fournie par une bibliothèque appelée Foundation

//Comparaison d'ordre entre deux chaînes
let options = String.CompareOptions.caseInsensitive
let order = "abc".compare("ABC", options: options)
order == ComparisonResult.orderedSame //true

Dans le code ci-dessus, la méthode compare (_: option) valide l'ordre entre les deux chaînes. --Omitted-- Le résultat est une valeur de .orderSame, ce qui signifie que l'ordre est le même.

C'est difficile à comprendre rien qu'en le lisant.

Essayez la lecture de code

Première ligne

let options = String.CompareOptions.caseInsensitive

Il s'agit d'une option fournie par la méthode Compare qui ne respecte pas la casse. Ceci est défini comme une option constante.

2e ligne

let order = "abc".compare("ABC", options: options)

Sur le côté droit, la méthode de comparaison est utilisée pour la chaîne de caractères "abc" pour la comparer avec "ABC" entre (). A ce moment, il reçoit les options définies précédemment comme argument. Le résultat obtenu ici est défini comme la constante «ordre».

3e ligne

order == ComparisonResult.orderedSame

Les commandes "order" et "ComparisonResult.orderedSame" définies dans la deuxième ligne sont appliquées à l'opérateur de comparaison et true est renvoyé.

Pensez aux détails

Sur la base de ce qui précède, j'ai un peu simplifié le code. Les options sont omises car elles ne semblent rien avoir à voir avec la question.

let order = "abc".compare("abc")
order == ComparisonResult.orderedSame // true

En d'autres termes, la valeur de retour de «abc» .compare («abc») »est« ComparisonResult.orderedSame »?

Je l'ai vérifié.

let hoge = "abc".compare("abc")
print(hoge) // NSComparisonResult

Résultat de l'exécution ・ ・ ・ NSComparisonResult

Qu'est-ce que le résultat de la comparaison?

Il semble qu'il soit nécessaire de comprendre ce gars qui est apparu avec un visage qui ne mange pas même avec l'exemple de code.

ComparisonResult

Après examen, il a été constaté que «ComparisonResult» est un ** type d'énumération ** et a trois constantes de cas.

enum ComparisonResult: Int {
    case orderedAscending = -1
    case orderedSame = 0
    case orderedDescending = 1
}

Cela signifie que la méthode compare retournera un ComparisonResult après avoir obtenu l'un des cas.

--Case commandéAscending ・ ・ ・ < --Case ordonnéMême ・ ・ ・ = --Case commandéDescendant ・ ・ ・ >

Étant donné que la cible de comparaison était égale cette fois, nous avons obtenu la valeur «OrdonnéSame» et Cela signifie que «ComparisonResult.orderedSame» a été renvoyé.

Valeur de retour de comparer

Revenons donc au code du début. Puisque c'est un gros problème, je changerai ce qui était "ABC" en "DEF".

let options = String.CompareOptions.caseInsensitive
let order = "abc".compare("DEF", options: options)
order == ComparisonResult.orderedAscending
// true

La valeur de retour de " abc ".compare (" DEF ", options: options) sur la deuxième ligne est ComparisonResult.orderedAscending, donc c'est vrai. Le résultat de la comparaison est «abc <DEF».

Parler plus tard

Même si je l'écris moi-même maintenant, c'est un contenu qui me fait me demander: «Pourquoi t'es-tu intéressé à ça?

La raison pour laquelle je peux y penser est peut-être que j'étais confus que la valeur de retour de la méthode était un type d'énumération.

C'est une autre méthode, mais j'ai imaginé le comportement simple suivant. Code et résultats d'exécution comme je m'y attendais

//Code et résultats d'exécution comme je m'y attendais
"abc".isEqual("abc")
// true

Cette fois aussi, j'ai eu du mal à comprendre à cause du préjugé que la forme mentionnée ci-dessus ne me sortait pas de l'esprit et que "les méthodes comparatives retournent vrai / faux".

** Conclusion: j'aurais dû lire le document officiel immédiatement. ** **

C'est ça.

Merci d'avoir lu jusqu'à présent m (_ _) m

Recommended Posts

[Swift] J'ai pensé à comparer
[Swift] [Débutant] J'ai beaucoup cherché sur #selector
[Swift] À propos du type d'énumération
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
[Spring boot] J'ai pensé au code testable par DI
Ce que j'ai recherché sur Java 8
[Swift] [Débutant]] À propos de l'opérateur de plage
[Swift] Résumé du type Bool
Ce que j'ai recherché sur Java 7
10 choses que je déteste sur Android
Comparez Java 8 en option avec Swift
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
Ce que j'ai appris sur Kotlin
Ce que j'ai recherché sur Java 5
J'ai réfléchi à la manière d'utiliser correctement WillSet de Swift.
Ce à quoi j'ai pensé lorsque j'ai commencé à migrer de Java vers Kotlin
[Swift] À propos du traitement itératif "instruction for-in"
Ce que j'ai recherché sur l'apprentissage Java
Lors de la mise à jour de ma propre application, j'ai sérieusement réfléchi à la structure du package
J'ai réfléchi à la façon de le rendre sans serveur tout en évitant le verrouillage des fournisseurs