Quel est l’équivalent Swift de isEqualToSsortingng dans Objective-C?

J’essaie 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, qui fonctionnait correctement:

  if([[self.username text] isEqualToSsortingng: @""] || [[self.password text] isEqualToSsortingng: @""] ) { 

Je suppose que je ne peux pas utiliser isEqualToSsortingng dans Swift. Toute aide serait appréciée.

Avec Swift, vous n’avez plus besoin de vérifier l’égalité avec isEqualToSsortingng

Vous pouvez maintenant utiliser ==

Exemple:

 let x = "hello" let y = "hello" let isEqual = (x == y) 

maintenant isEqual est true .

Pour vérifier l’identité d’ égalité (Merci Bryan pour le correctif) entre les objects, utilisez l’opérateur new === . Dans ce cas, x === y est false , car x et y ne sont pas la même variable.

Utilisez l’opérateur == au lieu de isEqual

Comparaison de chaînes

Swift propose trois méthodes pour comparer les valeurs Ssortingng: égalité de chaîne, égalité de préfixe et égalité de suffixe.

Égalité de chaîne

Deux valeurs de chaîne sont considérées égales si elles contiennent exactement les mêmes caractères dans le même ordre:

 let quotation = "We're a lot alike, you and I." let sameQuotation = "We're a lot alike, you and I." if quotation == sameQuotation { println("These two ssortingngs are considered equal") } // prints "These two ssortingngs are considered equal" . . . 

Pour plus de lecture de la documentation officielle de Swift (recherche Comparing Ssortingngs) .

En plus de @JJSaccolo , vous pouvez créer une méthode d’ equals personnalisée en tant que nouvelle extension de chaîne comme:

 extension Ssortingng { func isEqualToSsortingng(find: Ssortingng) -> Bool { return Ssortingng(format: self) == find } } 

Et usage:

 let a = "abc" let b = "abc" if a.isEqualToSsortingng(b) { println("Equals") } 

Pour sûr, l’opérateur d’origine == pourrait être mieux (fonctionne comme en Javascript) mais pour moi, la méthode isEqual donne une certaine clarté du code que nous comparons

J’espère que ça aidera quelqu’un,

Dans Swift, l’opérateur == est équivalent à la méthode isEqual: de Objective C (il appelle la méthode isEqual au lieu de comparer uniquement les pointeurs, et il existe une nouvelle méthode === pour vérifier que les pointeurs sont identiques), vous pouvez donc écrire simplement ceci comme:

 if username == "" || password == "" { println("Sign in failed. Empty character") } 

En fait, il semble que swift essaie de promouvoir des chaînes à traiter comme des objects et plus comme des valeurs. Cependant, cela ne signifie pas que sous le capot, swift ne traite pas les chaînes comme des objects, car vous avez tous remarqué que vous pouvez toujours invoquer des méthodes sur des chaînes et utiliser leurs propriétés.

Par exemple:-

 //example of calling method (Ssortingng to Int conversion) let intValue = ("12".toInt()) println("This is a intValue now \(intValue)") //example of using properties (fetching uppercase value of ssortingng) let caUpperValue = "ca".uppercaseSsortingng println("This is the uppercase of ca \(caUpperValue)") 

Dans objectC, vous pouvez passer la référence à un object ssortingng via une variable, en plus des méthodes d’appel, ce qui montre bien que les chaînes sont des objects purs.

Voici la capture lorsque vous essayez de regarder Ssortingng en tant qu’objects, dans swift vous ne pouvez pas passer d’object de chaîne par référence via une variable. Swift transmettra toujours une nouvelle copie de la chaîne. Par conséquent, les chaînes sont plus communément appelées types de valeur dans swift. En fait, deux littéraux de chaîne ne seront pas identiques (===). Ils sont traités comme deux copies différentes.

 let curious = ("ca" === "ca") println("This will be false.. and the answer is..\(curious)") 

Comme vous pouvez le voir, nous commençons à nous éloigner de la manière conventionnelle de considérer les chaînes comme des objects et de les traiter comme des valeurs. Par conséquent, .isEqualToSsortingng, qui était traité comme un opérateur d’identité pour les objects de type chaîne, n’est plus valide car vous ne pouvez jamais obtenir deux objects de chaîne identiques dans Swift. Vous pouvez uniquement comparer sa valeur ou, en d’autres termes, vérifier l’égalité (==).

  let NotSoCuriousAnyMore = ("ca" == "ca") println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)") 

Cela devient plus intéressant quand on regarde la mutabilité des objects ssortingng dans swift. Mais c’est pour une autre question, un autre jour. Quelque chose que vous devriez probablement regarder, parce que c’est vraiment intéressant. 🙂 Espérons que cela dissipe une certaine confusion. À votre santé!

Dans Swift, la fonction isEmpty vérifie si la chaîne est vide.

  if username.isEmpty || password.isEmpty { println("Sign in failed. Empty character") } 

Pour la comparaison de texte UITextField, j’utilise le code ci-dessous et fonctionne bien pour moi, faites-le moi savoir si vous trouvez une erreur.

 if(txtUsername.text.isEmpty || txtPassword.text.isEmpty) { //Do some stuff } else if(txtUsername.text == "****" && txtPassword.text == "****") { //Do some stuff }