empty - swift 4 string append
¿Cuál es el equivalente Swift de isEqualToString en Objective-C? (7)
Estoy tratando de ejecutar el siguiente código:
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")
}
}
Mi código anterior estaba en Objective-C, que funcionaba bien:
if([[self.username text] isEqualToString: @""] ||
[[self.password text] isEqualToString: @""] ) {
Supongo que no puedo usar isEqualToString
en Swift. Cualquier ayuda sería apreciada.
Además de la respuesta de @JJSaccolo
, puede crear un método de equals
como una nueva extensión de String como:
extension String {
func isEqualToString(find: String) -> Bool {
return String(format: self) == find
}
}
Y uso:
let a = "abc"
let b = "abc"
if a.isEqualToString(b) {
println("Equals")
}
Por supuesto, el operador original ==
podría ser mejor (funciona como en Javascript) pero para mí el método isEqual
da cierta claridad al código que comparamos las cadenas
Espero que ayude a alguien,
Con Swift ya no necesitas comprobar la igualdad con isEqualToString
Ahora puedes usar ==
Ejemplo:
let x = "hello"
let y = "hello"
let isEqual = (x == y)
ahora isEqual es true
.
Para verificar la identidad de igualdad (gracias Bryan por la corrección) entre objetos, use el nuevo operador ===
. En este caso, x === y
es false
, porque x y y no son la misma variable.
En Swift, el operador == es equivalente al método isEqual: del Objetivo C (llama al método isEqual en lugar de solo comparar punteros, y hay un nuevo método === para probar que los punteros son los mismos), así que puedes escribir esto como
if username == "" || password == ""
{
println("Sign in failed. Empty character")
}
En Swift, la función isEmpty
comprobará si la cadena está vacía.
if username.isEmpty || password.isEmpty {
println("Sign in failed. Empty character")
}
En realidad, parece que swift está tratando de promover que las cadenas se traten menos como objetos y más como valores. Sin embargo, esto no significa que bajo el capó swift no trate las cadenas como objetos, ya que estoy seguro de que todos notaron que todavía pueden invocar métodos en cadenas y usar sus propiedades.
Por ejemplo:-
//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)")
En objectC, podría pasar la referencia a un objeto de cadena a través de una variable, además de los métodos de llamada, lo que básicamente establece el hecho de que las cadenas son objetos puros.
Aquí está el truco cuando intenta ver la Cadena como objetos, de manera rápida no puede pasar un objeto de cadena por referencia a través de una variable. Swift siempre pasará una copia nueva de la cadena. Por lo tanto, las cadenas son más comúnmente conocidas como tipos de valor en swift. De hecho, dos literales de cadena no serán idénticos (===). Son tratados como dos copias diferentes.
let curious = ("ca" === "ca")
println("This will be false.. and the answer is../(curious)")
Como puede ver, estamos empezando a separarnos de la forma convencional de pensar las cuerdas como objetos y tratarlas como valores. Por lo tanto, .isEqualToString que se trató como un operador de identidad para objetos de cadena ya no es válido, ya que nunca podrá obtener dos objetos de cadena idénticos en Swift. Solo puede comparar su valor, o en otras palabras, verificar la igualdad (==).
let NotSoCuriousAnyMore = ("ca" == "ca")
println("This will be true.. and the answer is../(NotSoCuriousAnyMore)")
Esto se vuelve más interesante cuando se observa la mutabilidad de los objetos de cadena en swift. Pero eso es para otra pregunta, otro día. Algo que probablemente deberías mirar, porque es realmente interesante. :) Espero que se aclare alguna confusión. ¡Aclamaciones!
Para la comparación de texto de UITextField, estoy utilizando el siguiente código y estoy trabajando bien para mí, avíseme si encuentra algún error.
if(txtUsername.text.isEmpty || txtPassword.text.isEmpty)
{
//Do some stuff
}
else if(txtUsername.text == "****" && txtPassword.text == "****")
{
//Do some stuff
}
Utilice el operador == en lugar de isEqual
Comparando cuerdas
Swift proporciona tres formas de comparar valores de cadena: igualdad de cadena, igualdad de prefijo e igualdad de sufijo.
Igualdad de cuerdas
Dos valores de cadena se consideran iguales si contienen exactamente los mismos caracteres en el mismo orden:
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"
.
.
.
Para más información lea la documentación oficial de Swift (búsqueda de cadenas de comparación) .