Что такое Swift-эквивалент isEqualToString в Objective-C?

Я пытаюсь запустить код ниже:

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")
    }
}

Мой предыдущий код был в Objective-C, который работал нормально:

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

Я предполагаю, что не могу использовать isEqualToString в Swift. Любая помощь будет оценена.

Ответ 1

С Swift вам больше не нужно проверять равенство с помощью isEqualToString

Теперь вы можете использовать ==

Пример:

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

теперь isEqual это true.

Ответ 2

Используйте == вместо isEqual

Сравнение строк

Swift предоставляет три способа сравнения значений String: равенства строк, равенства префиксов и равенства суффиксов.

Равномерность строк

Два значения String считаются равными, если они содержат точно одинаковые символы в одном и том же порядке:

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"
.
.
.

Для более подробной информации официальная документация Swift (поиск сравнивающих строк).

Ответ 3

Я добавляю к @JJSaccolo ответ, вы можете создать собственный метод equals в качестве нового расширения строки, например:

extension String {
     func isEqualToString(find: String) -> Bool {
        return String(format: self) == find
    }
}

И использование:

let a = "abc"
let b = "abc"

if a.isEqualToString(b) {
     println("Equals")
}

Конечно, исходный оператор == может быть лучше (работает как в Javascript), но для меня метод isEqual дает некоторую ясность кода, которую мы сравниваем с строками

Надеюсь, что это поможет кому-то,

Ответ 4

В Swift оператор == эквивалентен Objective C isEqual: method (он вызывает метод isEqual вместо простого сравнения указателей, а там новый метод === для тестирования, что указатели одинаковы), поэтому вы может просто написать это как:

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

Ответ 5

На самом деле, похоже, что swift пытается рекламировать строки, которые будут обрабатываться менее похожими на объекты и больше похожими на ценности. Однако это не означает, что под капотом swift не обрабатывает строки как объекты, так как вы уверены, что все заметили, что вы все равно можете ссылаться на методы на строках и использовать их свойства.

Например: -

//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)")

В objectC вы можете передать ссылку на объект строки через переменную, поверх методов вызова на ней, что в значительной степени устанавливает тот факт, что строки являются чистыми объектами.

Вот уловка, когда вы пытаетесь посмотреть на String как объекты, в swift вы не можете передать строковый объект по ссылке через переменную. Swift всегда будет передавать новую копию строки. Следовательно, строки более широко известны как типы значений в swift. Фактически, два строковых литерала не будут идентичны (===). Они рассматриваются как две разные копии.

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

Как вы можете видеть, мы начинаем нарушать традиционный способ мышления строк как объектов и относиться к ним скорее как ценности. Следовательно. IsEqualToString, который рассматривался как оператор идентификации для строковых объектов, уже недействителен, так как вы никогда не можете получить два одинаковых строковых объекта в Swift. Вы можете сравнить его значение или, другими словами, проверить равенство (==).

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

Это становится более интересным, если вы посмотрите на изменчивость строковых объектов в swift. Но это еще один вопрос, другой день. Что-то, на что вы, вероятно, должны смотреть, потому что это действительно интересно.:) Надеюсь, что прояснит некоторую путаницу. Ура!

Ответ 6

В Swift функция isEmpty проверяет, пуста ли строка.

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

Ответ 7

Для сравнения текста UITextField я использую ниже код и отлично работаю для меня, дайте мне знать, если вы найдете какую-либо ошибку.

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