2014-06-19 9 views
12

Perché i seguenti elementi non funzionano in Swift?Swift === con nil

if someObject === nil { 
    } 

quello che dovete fare il test utilizzando l'operatore == come

if someObject == nil { 
    } 

Stavo pensando che === era più simile assicurandosi che i casi in cui la stessa (in pratica confrontando i puntatori) e == era più simile a un controllo isEqual. Quindi penserei che === sarebbe più appropriato per i test contro zero, ma ovviamente non sono corretto.

La documentazione:

=== o “Identico” significa che due costanti o variabili di tipo classe riferiscono esattamente la stessa istanza di classe.

== o “uguale a” significa che due istanze sono considerati “uguale” o “equivalente” di valore, per alcune significato appropriato di “uguali”, come definito dal progettista del tipo “.

+0

I seguenti lavori per me 'classe Persona {} let p = Person() let q: Person? = nil println (p === nil) println (q === nil) ' –

+1

L'oggetto avrebbe un valore di nil, non si riferisce esattamente allo stesso oggetto di nil, che è ciò che === significa. – milesper

risposta

17

Funziona esattamente come ci si aspetta:

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

L'unica avvertenza è che da confrontare con nil, il vostro must variabile in grado di esserenil. Ciò significa che deve essere facoltativo, indicato con ?.

var s: String non è permesso di essere nil, così sarebbe quindi restituisce sempre false quando === rispetto al nil.

+4

C'è un altro avvertimento: deve essere facoltativo di un tipo di classe. Ad esempio, non un "Int?". – Sulthan

+0

Questo ha un senso. Grazie mille per l'ottima risposta. –

+0

@Sulthan Puoi spiegare la tua dichiarazione? Int non è un tipo di classe? – Boon

0

Il mio primo istinto sarebbe che nil non è un'istanza di classe, ma un riferimento. Pertanto, someObject non può essere un'istanza di classe equivalente a nil.

Problemi correlati