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


271

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

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에서 사용할 수 없다고 가정 합니다. 도움을 주시면 감사하겠습니다.

답변:


427

Swift를 사용하면 더 이상 평등을 확인할 필요가 없습니다. isEqualToString

이제 사용할 수 있습니다 ==

예:

let x = "hello"
let y = "hello"
let isEqual = (x == y)

이제 isEqual은 true입니다.


37
=====NS 연산자 isEqual:와 그 서브 클래스에 대한 기본 호출 인 등호 연산자 인 반면 ID 연산자
Bryan Chen

3
예, 죄송합니다. "평등", 정체성이 아닙니다. 틀린 단어 :)
JJSaccolo

1
그러나 내가 빠진 것이 아니라면 Strings : 사이 의 신원을 테스트 할 수없는 것 같습니다 'String' does not conform to protocol 'AnyObject'.

3
@ user1040049 swift의 String은 class가 아닌 struct 유형이므로 === 연산자를 사용하여 String을 비교할 수 없습니다. 텍스트 / 문자열을 NSString으로 캐스트하면 === 연산자를 사용하여 비교할 수 있습니다.
sanjana

3
@JJSaccolo 당신은 정말로 신원 부분으로 오도합니다. String비교 에 관한이 질문 . Xcode 6.4에서 오류를 반환Binary operator '===' cannot be applied to two String operands
Dima Deplov

47

대신 == 연산자를 사용하십시오.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 공식 문자열 (검색 문자열 비교)을 참조하십시오 .


13

@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메소드는 문자열을 비교하는 코드 명확성을 제공합니다.

누군가에게 도움이되기를 바랍니다.


8

Swift에서 == 연산자는 Objective C의 isEqual : 메소드와 같습니다 (포인터를 비교하는 대신 isEqual 메소드를 호출하고 포인터가 동일한 지 테스트하기위한 새로운 === 메소드가 있습니다). 이것으로 :

if username == "" || password == ""
{
    println("Sign in failed. Empty character")
}

이것은 신속하게 작동하지만 사용자 이름이 nil 일 때 objc를 혼란스럽게합니다. 위에서 제안한 것처럼 username.isEmpty를 사용하고 어딘가에 객관적인 c에 해당하는 isEmpty 매크로가 있습니다.
johndpope

Swift에서 사용자 이름이 문자열로 선언되지 않는 한? (일명 선택적 <문자열>), nil 일 수 없습니다. 목표 C에서 당신은 단지 ([username length] == 0 || [password length] == 0) {...}라고 말할 수 있습니다.
Nick Lockwood

6

사실, 스위프트가 문자열을 객체와 같은 가치로 취급하도록 장려하려고하는 것처럼 느낍니다. 그러나 이것이 바로 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)")

문자열 객체의 가변성을 신속하게 볼 때 더 흥미로워집니다. 그러나 그것은 또 다른 질문, 다른 날에 대한 것입니다. 당신이 아마 살펴 봐야 할 것이 정말로 흥미를 유발합니다. :) 희망은 혼란을 없애줍니다. 건배!


4

UITextField 텍스트 비교를 위해 아래 코드를 사용하고 있으며 잘 작동합니다. 오류가 있으면 알려주십시오.

if(txtUsername.text.isEmpty || txtPassword.text.isEmpty)
{
    //Do some stuff
}
else if(txtUsername.text == "****" && txtPassword.text == "****")
{
    //Do some stuff
}

3

Swift isEmpty기능에서 문자열이 비어 있는지 확인합니다.

 if username.isEmpty || password.isEmpty {
      println("Sign in failed. Empty character")
 }
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.