Qu'est-ce que la Swift équivalent de isEqualToString en Objective-C?
Je suis en train d'exécuter le code ci-dessous:
import UIKit
class LoginViewController: UIViewController {
@IBOutlet var username : UITextField = UITextField()
@IBOutlet var password : UITextField = UITextField()
@IBAction func loginButton(sender : AnyObject) {
if username .isEqual("") || password.isEqual(""))
{
println("Sign in failed. Empty character")
}
}
Mon code précédent était en Objective-C, ce qui fonctionnait bien:
if([[self.username text] isEqualToString: @""] ||
[[self.password text] isEqualToString: @""] ) {
Je suppose que je ne peux pas utiliser isEqualToString
en Swift. Toute aide serait appréciée.
Vous devez vous connecter pour publier un commentaire.
Avec Swift vous n'avez pas besoin de plus pour vérifier l'égalité avec
isEqualToString
Vous pouvez maintenant utiliser
==
Exemple:
maintenant isEqual est
true
.===
est l'identité des opérateurs alors que==
est l'opérateur d'égalité (par défaut appelisEqual:
sur NSObject et de ses sous-classes)'String' does not conform to protocol 'AnyObject'
.String
comparaison. Xcode 6.4 vous renvoie une erreurBinary operator '===' cannot be applied to two String operands
Utilisation == opérateur au lieu de
isEqual
De La Comparaison De Chaînes De
Swift fournit trois méthodes pour comparer les valeurs de Chaîne: chaîne à l'égalité, préfixe de l'égalité, et le suffixe de l'égalité.
Chaîne De L'Égalité
Deux valeurs de Chaîne sont considérées comme égales si elles contiennent exactement les mêmes caractères dans le même ordre:
Pour en savoir plus, consultez la documentation officielle de Swift (de recherche, de Comparaison de Chaînes de caractères).
J'ai plus de
@JJSaccolo
réponse, vous pouvez créer desequals
méthode nouvelle Chaîne d'extension comme:Et utilisation:
Pour assurer original de l'opérateur
==
peut-être mieux (fonctionne en Javascript), mais pour moiisEqual
méthode donne un peu de code de clarté que nous comparer les ChaînesEspère que ça aidera quelqu'un,
Dans Swift, l'opérateur == est équivalent à l'Objectif C est isEqual: méthode (qu'il appelle la isEqual méthode au lieu d'une simple comparaison de pointeurs, il y a un nouveau === méthode pour tester que les pointeurs sont les mêmes), de sorte que vous pouvez simplement écrire ce que:
En fait, il se sent comme swift est d'essayer de promouvoir des chaînes de caractères pour être traitée de manière moins comme des objets et de plus en plus de valeurs. Toutefois, cela ne signifie pas que sous le capot swift ne permet pas de traiter les chaînes de caractères comme des objets, comme suis sûr que vous avez tous remarqué que vous pouvez toujours appeler des méthodes sur les cordes et l'utilisation de leurs propriétés.
Par exemple:-
Dans objectC vous pourriez passer de la référence à un objet de type string par une variable, en plus de l'appel de méthodes sur elle, qui assez bien établit le fait que les chaînes de caractères sont des objets purs.
Voici la capture lorsque vous essayez de regarder à la Chaîne comme des objets, en swift vous ne pouvez pas passer une chaîne de caractères de l'objet par référence par une variable. Swift sera toujours passer une nouvelle copie de la chaîne. Par conséquent, les chaînes sont plus communément connus comme des types de valeur en swift. En fait, les deux littéraux de chaîne ne sera pas identique (===). Ils sont traités comme deux copies différentes.
Comme vous pouvez le voir, nous sommes commencent à se retenir de la façon traditionnelle de penser de chaînes de caractères comme des objets et de les traiter plus comme des valeurs. Par conséquent .isEqualToString qui a été traité comme une identité de l'opérateur pour les objets de chaîne n'est pas plus valide que vous ne pourrez jamais deux identiques objets string en Swift. Vous ne pouvez comparer sa valeur, ou en d'autres termes vérifier l'égalité(==).
Cela devient plus intéressant quand vous regardez les transformations de la chaîne objets en swift. Mais c'est une autre question, un autre jour. Quelque chose que vous devriez probablement regarder dans, cause de sa très intéressante. 🙂 J'espère que subsiste une certaine confusion. Cheers!
Dans Swift, la
isEmpty
fonction, il va vérifier si la chaîne est vide.Pour la UITextField de comparaison de texte, je suis à l'aide de code ci-dessous et fonctionne très bien pour moi, laissez-moi savoir si vous trouvez une erreur.