아래 코드를 실행하려고합니다.
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에서 사용할 수 없다고 가정 합니다. 도움을 주시면 감사하겠습니다.
답변
Swift를 사용하면 더 이상 평등을 확인할 필요가 없습니다. isEqualToString
이제 사용할 수 있습니다 ==
예:
let x = "hello"
let y = "hello"
let isEqual = (x == y)
이제 isEqual은 true
입니다.
답변
대신 == 연산자를 사용하십시오.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"
.
.
.
답변
@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에서 == 연산자는 Objective C의 isEqual : 메소드와 같습니다 (포인터를 비교하는 대신 isEqual 메소드를 호출하고 포인터가 동일한 지 테스트하기위한 새로운 === 메소드가 있습니다). 이것으로 :
if username == "" || password == ""
{
println("Sign in failed. Empty character")
}
답변
사실, 스위프트가 문자열을 객체와 같은 가치로 취급하도록 장려하려고하는 것처럼 느낍니다. 그러나 이것이 바로 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는 항상 새로운 문자열 사본을 전달합니다. 따라서 문자열은 더 빨리 값 유형으로 알려져 있습니다. 실제로 두 문자열 리터럴은 동일하지 않습니다 (===). 그들은 두 개의 다른 사본으로 취급됩니다.
let curious = ("ca" === "ca")
println("This will be false.. and the answer is..\(curious)")
보시다시피 우리는 문자열을 객체로 생각하고 더 가치있는 것으로 취급하는 기존의 방식에서 벗어나기 시작했습니다. 따라서 Swift에서 두 개의 동일한 문자열 객체를 얻을 수 없으므로 문자열 객체의 ID 연산자로 처리 된 .isEqualToString은 더 이상 유효하지 않습니다. 값만 비교하거나 다른 말로하면 평등 (==)을 확인하십시오.
let NotSoCuriousAnyMore = ("ca" == "ca")
println("This will be true.. and the answer is..\(NotSoCuriousAnyMore)")
문자열 객체의 가변성을 신속하게 볼 때 더 흥미로워집니다. 그러나 그것은 또 다른 질문, 다른 날에 대한 것입니다. 당신이 아마 살펴 봐야 할 것이 정말로 흥미를 유발합니다. 🙂 희망은 혼란을 없애줍니다. 건배!
답변
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")
}