私は以下のコードを実行しようとしています:
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: @""] ) {
SwiftではisEqualToString
を使用できないと思います。任意の助けがいただければ幸いです。
Swiftを使えば、isEqualToString
と同等かどうかをチェックする必要はもうありません。
==
を使えるようになりました
例:
let x = "hello"
let y = "hello"
let isEqual = (x == y)
今isEqualはtrue
です。
isEqual
の代わりに == 演算子を使用してください。
Swiftは、文字列値、文字列の等価性、接頭辞の等価性、接尾辞の等価性の3つの比較方法を提供します。
文字列の等価性
2つの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"
.
.
.
@JJSaccolo
という回答に加えて、カスタムのequals
メソッドを新しいString拡張として作成することができます。
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では、==演算子はObjective CのisEqual:メソッドと同等です(ポインタを比較する代わりに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では、それを呼び出すメソッドの上に、変数を通して文字列オブジェクトへの参照を渡すことができます。これは、文字列が純粋なオブジェクトであるという事実をほぼ確立します。
これは、Stringをオブジェクトとして見ようとしたときのキャッチです。Swiftでは、文字列オブジェクトを変数を通して参照渡しすることはできません。 Swiftは常に新しい文字列のコピーを渡します。そのため、Swiftでは文字列はより一般的に値型として知られています。実際、2つの文字列リテラルは同一ではありません(===)。それらは2つの異なるコピーとして扱われます。
let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")
ご覧のとおり、文字列をオブジェクトとみなして値のように扱うという従来の考え方から脱却し始めています。したがって、Swiftでは2つの同一の文字列オブジェクトを取得できないため、文字列オブジェクトの恒等演算子として扱われていた.isEqualToStringは有効ではありません。値を比較することしかできません。つまり、等価かどうかをチェックします(==)。
let NotSoCuriousAnyMore = ("ca" == "ca")
println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")
Swiftで文字列オブジェクトの可変性を見ると、これはもっと面白くなります。しかし、それはまた別の質問です。あなたがおそらく調べるべき何かが、それを本当におもしろいものにします。 :)混乱が解消されることを願っています。乾杯!
UITextFieldのテキスト比較では、以下のコードを使用していますが、問題なく機能しています。エラーが発生した場合はお知らせください。
if(txtUsername.text.isEmpty || txtPassword.text.isEmpty)
{
//Do some stuff
}
else if(txtUsername.text == "****" && txtPassword.text == "****")
{
//Do some stuff
}
SwiftではisEmpty
関数は文字列が空かどうかチェックします。
if username.isEmpty || password.isEmpty {
println("Sign in failed. Empty character")
}