2014-06-19 1 views
12

다음은 스위프트에서 작동하지 않는 이유는 무엇입니까?스위프트 === with nil

if someObject === nil { 
    } 

당신은 내가 그 === 더 인스턴스를 확인하는 것 같았다 생각과 같은

if someObject == nil { 
    } 

== 연산자를 사용하여 테스트를해야 할 곳 (기본적으로 포인터를 비교하는 동일한)와 == isEqual 체크와 비슷했다. 따라서 나는 ===에 대한 테스트에 더 적합 할 것이라고 생각 하겠지만 분명히 틀렸다.

문서 상태 :

=== 또는 "은 동일한이"두 상수 또는 클래스 타입의 변수 똑같은 클래스 인스턴스를 참조한다는 것을 의미한다.

== 또는 "같음을"개의 경우가 고려된다는 것을 의미

+0

다음은 나를 위해 작동'class Person {} let p = Person() q : Person을 보자. = nil println (p === nil) println (q === nil)' –

+1

개체의 값은 nil이고 nil과 동일한 개체는 참조하지 않습니다. 이는 의미입니다. – milesper

답변

17

그것은 당신이 기대 똑같이 작동합니다

var s: String? = nil 
s === nil // true 

주의해야 할 점은 그 nil 비교하는 것입니다,nil 될하는 변수 해야 할 수. 즉, 선택 사항이어야하며 ?으로 표시되어야합니다.

var s: String

nil 될 수 없습니다, 그래서 ===nil에 비해 것 그러므로 항상 false 반환합니다.

+4

또 다른 경고가 있습니다 - 클래스 유형의 선택 항목이어야합니다. 예를 들어 'Int'가 아닙니다. – Sulthan

+0

그것은 톤 감각을 만든다. 훌륭한 답변을 해주셔서 정말 감사드립니다. –

+0

@ 설화 당신의 진술을 설명 할 수 있습니까? Int는 클래스 유형이 아닙니까? – Boon

0
"동일한"종류의 설계자에 의해 정의 된 바와 같다. "어떤 적절한 의미를 들어, 값 "동일 "또는"상응하는 "

내 첫 번째 본능은 nil이 클래스 인스턴스가 아니라 참조 일 수 있습니다. 따라서 someObjectnil에 해당하는 클래스 인스턴스가 될 수 없습니다.