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 bien:
if([[self.username text] isEqualToString: @""] ||
[[self.password text] isEqualToString: @""] ) {
Je suppose que je ne peux pas utiliser isEqualToString
dans Swift. Toute aide serait appréciée.
Avec Swift vous n'avez plus besoin de vérifier l'égalité avec isEqualToString
Vous pouvez maintenant utiliser ==
Exemple:
let x = "hello"
let y = "hello"
let isEqual = (x == y)
isEqual est maintenant true
.
Utilisez l'opérateur == au lieu de isEqual
Swift propose trois méthodes pour comparer les valeurs de chaîne: égalité de chaîne, égalité de préfixe et égalité de suffixe.
Égalité des chaînes
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:
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 strings are considered equal")
}
// prints "These two strings are considered equal"
.
.
.
Pour plus de lecture documentation officielle de Swift (recherche en comparant des chaînes). .
En plus de @JJSaccolo
answer, vous pouvez créer une méthode equals
personnalisée en tant que nouvelle extension String, comme par exemple:
extension String {
func isEqualToString(find: String) -> Bool {
return String(format: self) == find
}
}
Et utilisation:
let a = "abc"
let b = "abc"
if a.isEqualToString(b) {
println("Equals")
}
Bien sûr, l'opérateur original ==
pourrait être meilleur (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 va aider quelqu'un,
Dans Swift, l'opérateur == équivaut à la méthode isEqual: de Objective C (il appelle la méthode isEqual au lieu de simplement comparer les pointeurs. Une nouvelle méthode === permet de vérifier que les pointeurs sont identiques), vous pouvez donc écrire ceci comme:
if username == "" || password == ""
{
println("Sign in failed. Empty character")
}
En fait, on a l'impression que Swift essaie de promouvoir que les chaînes soient traitées moins comme des objets et plus comme des valeurs. Toutefois, cela ne signifie pas que sous le capot, Swift ne traite pas les chaînes comme des objets, car vous avez sûrement 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 (String to Int conversion)
let intValue = ("12".toInt())
println("This is a intValue now \(intValue)")
//example of using properties (fetching uppercase value of string)
let caUpperValue = "ca".uppercaseString
println("This is the uppercase of ca \(caUpperValue)")
Dans objectC, vous pouvez passer la référence à un objet chaîne par le biais d'une variable, en plus de l'appel de méthodes, ce qui établit à peu près le fait que les chaînes sont des objets purs.
Voici le problème lorsque vous essayez de regarder String en tant qu'objets. Dans Swift, vous ne pouvez pas transmettre un objet 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 constater, nous commençons à nous éloigner de la manière conventionnelle de considérer les chaînes comme des objets et à les traiter davantage comme des valeurs. Ainsi, .isEqualToString qui a été traité comme un opérateur d’identité pour les objets chaîne n’est plus valide, car vous ne pouvez jamais obtenir deux objets 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 lorsque vous examinez la mutabilité des objets chaîne dans Swift. Mais c'est pour une autre question, un autre jour. Quelque chose que vous devriez probablement examiner, car c'est vraiment intéressant. :) J'espère que cela dissipe une certaine confusion. À votre santé!
Pour la comparaison de texte UITextField que j'utilise avec le code ci-dessous et qui fonctionne correctement pour moi, laissez-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
}
Dans Swift, la fonction isEmpty
vérifie si la chaîne est vide.
if username.isEmpty || password.isEmpty {
println("Sign in failed. Empty character")
}