2014-06-19 54 views
12

爲什麼以下不能在Swift中工作?Swift ===無

if someObject === nil { 
    } 

您可以選擇使用==操作符如

if someObject == nil { 
    } 

我在想,===更像確保實例做測試,其中完全相同(基本指針比較)和==更像是一個isEqual檢查。因此,我認爲===對於nil的測試會更合適,但我顯然是不正確的。

的文檔狀態:

===或「等同於」是指兩個常量或類型 的變量是指完全相同的類的實例。

==或「等於」是指兩個實例被認爲是「等於」或「等效」 中值,爲「相等」,如由類型的設計者定義。」

+0

以下適用於我的'class Person {} let p = Person() let 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

@Sulthan你能解釋一下你的陳述嗎? Int不是類的類型? – Boon

0
一些適當的含義

我的第一個直覺是nil不是一個類實例,而是一個參考。因此someObject不能與nil等效的類實例。