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