[string] Objective-C에서 isEqualToString과 동일한 Swift는 무엇입니까?

아래 코드를 실행하려고합니다.

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: @""] ) {

isEqualToStringSwift에서 사용할 수 없다고 가정 합니다. 도움을 주시면 감사하겠습니다.



답변

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"
.
.
.

자세한 내용 은 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에서 == 연산자는 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")
 }