[Swift] UITextField m'a appris la différence entre nil et ""

L'autre jour, j'ai vu la différence entre nil et "" (d'après la lettre), donc je vais l'enregistrer.

Qu'est-il arrivé

UITextField (textField) pour entrer un message et un bouton ( sendButton) pour l'envoyer A été mis en œuvre. スクリーンショット 2020-11-03 18.56.09.png

Ici, cela n'a pas de sens si le textField n'a pas de valeur, j'ai donc pensé à définir le bouton d'envoi pour qu'il ne puisse être utilisé que lorsque le textField a une valeur. La mise en œuvre est la suivante


    @objc func textFieldDidChange(sender: UITextField) {
        if textField.text == nil {//Faites attention à cette ligne
            sendButton.isEnabled = false
        } else {
            sendButton.isEnabled = true
        }
    }

textFieldDidChange () est une méthode qui est appelée à chaque fois que la valeur de textField change. Vérifions le résultat de l'exécution.

Etat initial

スクリーンショット 2020-11-03 19.08.09.png

Bien sûr, vous ne pouvez pas appuyer sur le bouton Soumettre car il n'y a pas de valeur dans textField.

Entrez les caractères

スクリーンショット 2020-11-03 18.56.09.png

Les caractères sont saisis et le bouton d'envoi peut être pressé.

Supprimer des caractères

スクリーンショット 2020-11-03 19.19.49.png

Le bouton d'envoi peut être pressé même s'il n'y a pas de caractères.

: froncer les sourcils2: Nande? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? : froncer les sourcils2:

solution de contournement

À partir des événements ci-dessus, il a été constaté que ** si vous entrez un caractère une fois et que vous le supprimez, ce n'est pas nul **. J'ai changé l'expression conditionnelle en pensant: "Pourquoi a-t-elle été écrite comme textField.text == nil en premier lieu?"

    @objc func textFieldDidChange(sender: UITextField) {
        if commentTextField.text == ""{//Faites attention à cette ligne
            sendButton.isEnabled = false
        } else {
            sendButton.isEnabled = true
        }
    }

Cette fois, j'ai changé "" (du caractère) en nil dans l'expression conditionnelle et l'ai mis. Vérifiez le résultat de l'exécution.

Supprimer après avoir saisi des caractères

スクリーンショット 2020-11-03 19.39.46.png

Il est difficile de le transmettre uniquement avec l'image, mais j'ai pu confirmer un fonctionnement normal.

Sommaire

Concernant UITextField, la gestion des expressions et des éléments conditionnels correspond comme suit.

== nil == ""
Etat initial true true
Entrez les caractères false false
Supprimer les caractères saisis false true

Après cette expérience

Cet événement m'a permis de mieux comprendre la différence entre nil et "". Jusqu'à présent, on me disait souvent dans les livres que "nil et" "sont différents !!", et je me suis souvenu de moi, mais c'était la première fois que j'en étais témoin lors de la mise en œuvre.

Reconnaissance du zéro actuel et de ""

nil Complètement innocent et sans valeur! Incroyablement pur! !! Eau naturel super belle

"" (caractère de)

Une image qui ressemble à "un état sans aucune valeur" et reproduit artificiellement "un état sans valeur" Sentir que les eaux usées sont filtrées et ramenées à la nature Un peu sale


Si vous rencontrez des problèmes avec cette reconnaissance, je vous l'écrirai à nouveau.

Recommended Posts

[Swift] UITextField m'a appris la différence entre nil et ""
À propos de la différence entre irb et pry
[Java] Comprendre la différence entre List et Set
[Rails / Active Record] À propos de la différence entre créer et créer!
Comprenez la différence entre les classes abstraites et les interfaces!
Quelle est la différence entre SimpleDateFormat et DateTimeFormatter? ??
Différence entre vh et%
Différence entre i ++ et ++ i
[Ruby] J'ai réfléchi à la différence entre each_with_index et each.with_index
[Rails] J'ai étudié la différence entre les ressources et les ressources
Quelle est la différence entre System Spec et Feature Spec?
Différences entre les classes et les instances dans Ruby
[Rails] Quelle est la différence entre la redirection et le rendu?
Comparez la différence entre dockerfile avant et après docker-slim
Quelle est la différence entre ignorer et en attente? [RSpec]
[Java] Différence entre == et égal
Différence entre CUI et GUI
Différence entre les variables et les variables d'instance
Différence entre mockito-core et mockito-all
Différence entre l'installation de bundle et de bundle
Différence entre render et redirect_to
Différence entre List et ArrayList
Différence entre .bashrc et .bash_profile
Différence entre StringBuilder et StringBuffer
Différence entre render et redirect_to
[Rails] Quelle est la différence entre l'installation et la mise à jour du bundle?
Différence entre Java et JavaScript (comment trouver la moyenne)
Quelle est la différence entre une action et une méthode d'instance?
[Java] Vérifiez la différence entre orElse et orElseGet avec IntStream
Remplaçons la différence entre == (identité) et méthode equals (équivalence)
La différence entre la programmation qui utilise des classes Ruby et la programmation qui n'utilise pas
[Ruby] Différence entre obtenir et publier
Différence entre la méthode d'instance et la méthode de classe
Trouvez la différence entre les types de liste
Différence entre l'opérateur == et la méthode égale
[Java] Différence entre Hashmap et HashTable
Différences entre gets et gets.chomp (autres que les sauts de ligne)
[Terminal] Différence entre irb et pry
JavaServlet: différence entre executeQuery et executeUpdate
[Ruby] Différence entre is_a? Et instance_of?
Différence entre l'opérateur == et la méthode eqals
Différence approximative entre RSpec et minitest
[Rails] Différence entre find et find_by
Différence entre la variable d'instance et la variable de classe
[JAVA] Différence entre abstrait et interface
Différence entre Thymeleaf @RestController et @Controller
Différence entre Stream map et flatMap
[Java] Différence entre array et ArrayList
Différence entre le type primitif et le type de référence
[Java] Quelle est la différence entre form, entity et dto? [Haricot]
Différence entre string.getByte () et Hex.decodeHex (string.toCharaArray ())