Saya mencoba menjalankan kode di bawah ini:
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")
}
}
Kode saya sebelumnya adalah di Objective-C, yang berfungsi dengan baik:
if([[self.username text] isEqualToString: @""] ||
[[self.password text] isEqualToString: @""] ) {
Saya berasumsi saya tidak bisa menggunakan isEqualToString
Swift. Bantuan apa pun akan dihargai.
===
adalah operator identitas sedangkan operator==
kesetaraan (dengan panggilan defaultisEqual:
pada NSObject dan subkelasnya)'String' does not conform to protocol 'AnyObject'
.String
perbandingan. Xcode 6.4 mengembalikan Anda kesalahanBinary operator '===' cannot be applied to two String operands
Gunakan operator == sebagai ganti
isEqual
Membandingkan Strings
Swift menyediakan tiga cara untuk membandingkan nilai String: kesetaraan string, kesetaraan awalan, dan kesetaraan sufiks.
Kesetaraan String
Dua nilai String dianggap sama jika mengandung karakter yang persis sama dalam urutan yang sama:
Untuk selengkapnya baca dokumentasi resmi Swift (pencarian Membandingkan Strings) .
sumber
Selain saya
@JJSaccolo
jawab, Anda dapat membuatequals
metode khusus sebagai ekstensi String baru seperti:Dan penggunaan:
Pasti operator asli
==
mungkin lebih baik (berfungsi seperti dalam Javascript) tetapi bagi sayaisEqual
metode memberikan beberapa kejelasan kode yang kita bandingkan StringsSemoga ini bisa membantu seseorang,
sumber
Di Swift, operator == sama dengan Objective C's isEqual: method (memanggil metode isEqual daripada hanya membandingkan pointer, dan ada metode === baru untuk menguji bahwa pointernya sama), jadi Anda bisa menulis ini sebagai:
sumber
Sebenarnya, rasanya seperti swift sedang berusaha mempromosikan string agar diperlakukan kurang seperti objek dan lebih seperti nilai. Namun ini tidak berarti di bawah kap swift tidak memperlakukan string sebagai objek, karena saya yakin Anda semua memperhatikan bahwa Anda masih dapat memanggil metode pada string dan menggunakan propertinya.
Sebagai contoh:-
Dalam objectC Anda bisa meneruskan referensi ke objek string melalui variabel, di atas metode panggilan di atasnya, yang cukup banyak menetapkan fakta bahwa string adalah objek murni.
Ini adalah tangkapan ketika Anda mencoba untuk melihat String sebagai objek, dengan cepat Anda tidak dapat melewatkan objek string dengan referensi melalui variabel. Swift akan selalu memberikan salinan string yang baru. Oleh karena itu, string lebih dikenal sebagai tipe nilai di swift. Faktanya, dua string literal tidak akan identik (===). Mereka diperlakukan sebagai dua salinan berbeda.
Seperti yang dapat Anda lihat, kita mulai melepaskan diri dari cara konvensional menganggap string sebagai objek dan memperlakukannya lebih seperti nilai. Oleh karena itu .isEqualToString yang diperlakukan sebagai operator identitas untuk objek string tidak lebih valid karena Anda tidak akan pernah bisa mendapatkan dua objek string yang identik di Swift. Anda hanya dapat membandingkan nilainya, atau dengan kata lain memeriksa kesetaraan (==).
Ini menjadi lebih menarik ketika Anda melihat ketidakmampuan objek string dalam cepat. Tapi itu pertanyaan lain, hari lain. Sesuatu yang mungkin harus Anda perhatikan, karena itu sangat menarik. :) Harapan yang membersihkan beberapa kebingungan. Bersulang!
sumber
Untuk perbandingan teks UITextField yang saya gunakan kode di bawah ini dan berfungsi dengan baik untuk saya, beri tahu saya jika Anda menemukan kesalahan.
sumber
Dalam Swift
isEmpty
fungsi itu akan memeriksa apakah string kosong.sumber