Estou tentando executar o código abaixo:
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")
}
}
Meu código anterior estava no Objective-C, que estava funcionando bem:
if([[self.username text] isEqualToString: @""] ||
[[self.password text] isEqualToString: @""] ) {
Presumo que não posso usar isEqualToString
no Swift. Qualquer ajuda seria apreciada.
===
é operadores de identidade enquanto==
é operador de igualdade (por chamada padrãoisEqual:
em NSObject e suas subclasses)'String' does not conform to protocol 'AnyObject'
.String
comparação. Xcode 6.4 retorna um erroBinary operator '===' cannot be applied to two String operands
Use o operador == em vez de
isEqual
Comparando strings
Swift fornece três maneiras de comparar valores de String: igualdade de string, igualdade de prefixo e igualdade de sufixo.
Igualdade de Cordas
Dois valores de String são considerados iguais se contiverem exatamente os mesmos caracteres na mesma ordem:
Para mais, leia a documentação oficial do Swift (procure Comparing Strings) .
fonte
Além de
@JJSaccolo
responder, você pode criar umequals
método personalizado como nova extensão String, como:E uso:
Com certeza o operador original
==
pode ser melhor (funciona como em Javascript), mas, para mim, oisEqual
método fornece alguma clareza de código que comparamos StringsEspero que ajude alguém,
fonte
No Swift, o operador == é equivalente ao método isEqual: do Objetivo C (chama o método isEqual em vez de apenas comparar ponteiros, e há um novo método === para testar se os ponteiros são iguais), para que você possa escrever isso como:
fonte
Na verdade, parece rápido tentar promover seqüências de caracteres para serem tratadas menos como objetos e mais como valores. No entanto, isso não significa que, por baixo do capô, o swift não trata as strings como objetos, como todos sabem que ainda é possível invocar métodos nas strings e usar suas propriedades.
Por exemplo:-
No objectC, você pode passar a referência a um objeto de string por meio de uma variável, além de chamar métodos, o que praticamente estabelece o fato de que strings são objetos puros.
Aqui está o problema quando você tenta olhar String como objetos, rapidamente você não pode passar um objeto string por referência através de uma variável. O Swift sempre passa uma cópia nova da string. Portanto, as strings são mais comumente conhecidas como tipos de valor rapidamente. De fato, dois literais de string não serão idênticos (===). Eles são tratados como duas cópias diferentes.
Como você pode ver, estamos começando a romper com o modo convencional de pensar em cordas como objetos e tratá-las mais como valores. Portanto, .isEqualToString, que foi tratado como um operador de identidade para objetos de string, não é mais válido, pois você nunca pode obter dois objetos de string idênticos no Swift. Você só pode comparar seu valor ou, em outras palavras, verificar a igualdade (==).
Isso fica mais interessante quando você olha para a mutabilidade de objetos de string rapidamente. Mas isso é para outra pergunta, outro dia. Algo que você provavelmente deveria procurar, porque é realmente interessante. :) Espero que isso esclareça alguma confusão. Felicidades!
fonte
Para a comparação de texto UITextField, estou usando o código abaixo e funcionando bem para mim, avise-me se encontrar algum erro.
fonte
Em Swift, a
isEmpty
função verifica se a sequência está vazia.fonte