2016-07-26 3 views
2

Swift에서 문자열을 비교할 때 옵션이 아닌 문자열을 선택적 문자열과 비교할 수 있습니다.문자열 옵션 비교 대 비 선택적 옵션

과 같이 (텍스트는 선택 사항이며, 그것은 비어) : 항등 연산자는 그 자체로 문자열을 펼쳤다 있기 때문에

UITextField.text == "" // True 

인가?

+3

은 실제 코드입니까? 왜냐하면'UITextField' 클래스에는'text' 속성이 없습니다. – Wain

+0

이것은 단지 예입니다. 나는 UITextField를 초기화했고 text라는 속성을 가지고있다. 여기에서 볼 수 있습니다 : https://developer.apple.com/library/ios/documentation/UIKit/Reference/UITextField_Class/ – WYS

+1

언 래핑 (unwrapping)이 없으며, 동등 함은 optionals에 대해서도 정의되어 있습니다. 옵션은 선택적으로 자동 승격 될 수 있습니다. – Sulthan

답변

2
당신의 이론은 다음 예에서 보유하지 않는

:

let x: String? = nil 

if x == "" { 
    print("True") 
} else { 
    print("False") //Printed 
} 

무엇 실제로 여기에서 일어나고있는 것은 text 속성이 초기화에 실제로 nil 결코 없다는 것입니다 - 그것은되는 대신 빈 문자열의 documentation에 의해 주어진 :

이 문자열은 기본적으로 @ ""입니다.

Swift 컴파일러는 선택적 옵션을 암시 적으로 언랩하지 않으며 대신 프로그래머에게 그 책임을 맡깁니다.

public func ==<T : Equatable>(lhs: T?, rhs: T?) -> Bool 

오른쪽에있는 비 옵션이 자동으로 선택으로 승격됩니다 다음 == 작업이 또한 선택적 항목에 대해 정의 된 모든 Equatable 유형에 대해

10

.

두 개의 값이 모두 nil이거나 둘 다 같지 않고 동등한 경우 선택적 기호 인 경우 ==true을 반환합니다.

+3

사이드 노트 : 선택적 인수를 취하는 해당 * 비교 연산자는 Swift 3에서 제거됩니다. https://github.com/apple/swift-evolution/blob/master/proposals/0121-remove-optional-comparison-operators. md. –