Что такое быстрый эквивалент 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. Любая помощь будет оценена по достоинству.

518   7  

7 ответов:

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

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

пример:

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

теперь равно составляет true.

проверить равенство identity (спасибо Брайану за исправление) между объектами, используйте новый оператор ===. В этом случае x === y и false, потому что x и y не являются одной и той же переменной.

использовать == оператор вместо isEqual

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

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

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

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

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 (поиск сравнение Строки).

Я кроме @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 метод дает некоторую ясность кода, что мы сравниваем строки

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

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

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

на самом деле, похоже, что 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 вы можете передать ссылку на строковый объект через переменную, поверх вызова методов на нем, которые в значительной степени устанавливает тот факт, что строки являются чистыми объектами.

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

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

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

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

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

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

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

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

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

Comments

    Ничего не найдено.