2014-06-19 14 views
12

Aşağıdakiler neden Swift'de çalışmıyor?Swift === ile nil

if someObject === nil { 
    } 

Ben o === fazla örneğini emin gibiydi düşünüyordum gibi

if someObject == nil { 
    } 

== operatörünü kullanarak testini yapmak zorunda nerede (temelde işaretçileri karşılaştıran tam aynı) ve == bir isEqual kontrolüne benziyordu. Böylece === nil'e karşı test etmek için daha uygun olacağını düşünürdüm, ama açıkçası yanılıyordum.

belgelerine durumları:

=== veya “aynı” iki sabit veya sınıf türü nesneyi aynı sınıf örneği bakınız anlamına gelir.

== ya da “'ye eşit” iki örneği olarak kabul edilir olduğu anlamına gelir

+0

Aşağıdaki işler benim için '' class Person {} let p = Kişi() let q: Person? = nil println (p === nil) println (q === nil) ' –

+1

Nesnenin nil değeri vardır, nil ile aynı nesneye atıfta bulunmaz, yani === demektir. – milesper

cevap

17

Bekleyebileceğiniz tam gibi çalışır:

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

bilmeniz gereken tek o nil karşılaştırmak olduğununil olmak için değişken zorunluluk mümkün. Bu, ? ile belirtilen isteğe bağlı olması gerektiği anlamına gelir.

var s: String

nil izin verilmez, bu yüzden ===nil kıyasla bu nedenle olur hep false döndürür.

+4

Başka bir uyarı var - bir sınıf tipi isteğe bağlı olmalıdır. Örneğin bir "Int" değil. – Sulthan

+0

Bu bir ton hissi veriyor. Büyük cevap için çok teşekkür ederim. –

+0

@Sulthan Bildirinizi açıklayabilir misiniz? Int bir sınıf türü değil mi? – Boon

0
“eşit”, tipinin tasarımcısı tarafından tanımlandığı gibidir.”Bazı uygun anlamları için, değer “eşit”veya“eşdeğer”

İlk içgüdümüm, nil'un bir sınıf örneği değil, bir referans olması olabilir. Yani someObject, nil'a eşdeğer bir sınıf örneği olamaz.