Bir &; açılmamış değer" Swift " nedir?
İOS 8 / OS X 10.10 için Swift* *23 ve terim izleyerek öğreniyorum "değer açılmamış" birkaç kez, bu paragrafta olduğu gibi kullanılır (altındaNesne ve Sınıf):
İsteğe bağlı değerler ile çalışırken, yazabilirsiniz ? operasyon öncesi yöntemleri, özellikleri ve subscripting gibi. Eğer daha önce bu değer ? nil, sonra her şeyi ? ve bütün değeri göz ardı edilir ifade sıfır. Aksi takdirdeisteğe bağlı değer açılmamışve sonra her şeyi ? üzerinde hareket ederdeğer açılmamış. Her iki durumda da, bütün ifadenin değeri isteğe bağlı bir değerdir.
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare?.sideLength
Anlamıyorum, ve şans olmadan web üzerinde arama yaptı.
Bu ne demektir?
Edit
Cezary cevabı, orijinal kod çıktı ve nihai çözüm (oyun alanı üzerinde test) arasında küçük bir fark vardır :
Orijinal kodu
Cezary çözüm
Üst sınıf' özellikler ilk durumda boş bir nesne var iken ikinci durumda çıkış gösterilir.
Sonuç Her iki durumda da aynı olması gerekmiyor mu?
İlgili Q&A : What is an optional value in Swift?
CEVAP
İlk olarak, İsteğe bağlı bir tür ne olduğunu anlamak gerekir. İsteğe bağlı bir tür temelde değişken anlamına gelirolabilirnil
.
Örnek:
var canBeNil : Int? = 4
canBeNil = nil
Soru işareti canBeNil
nil
olduğunu gösterir.
Bu işe yaramaz:
var cantBeNil : Int = 4
cantBeNil = nil // can't do this
Eğer isteğe bağlı ise değişken değerini almak içinaçayım. Bu sadece sonunda bir ünlem işareti koymak demektir.
var canBeNil : Int? = 4
println(canBeNil!)
Kodunuzu bu gibi görünmelidir:
let optionalSquare: Square? = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare!.sideLength
Bir not:
Ayrıca optionals otomatik olarak soru işareti yerine ünlem işareti kullanarak açmak bildirebilirsiniz.
Örnek:
var canBeNil : Int! = 4
print(canBeNil) // no unwrapping needed
Kodunuzu düzeltmek için alternatif bir yol:
let optionalSquare: Square! = Square(sideLength: 2.5, name: "optional square")
let sideLength = optionalSquare.sideLength
DÜZENLEME:
Görüyorsun işte fark tam olarak isteğe bağlı değer olduğunun belirtisidirsarılmış. Bunun üstüne başka bir katman var.açılmamışsürüm sadece, iyi, açılmamış, çünkü düz nesne gösterir.
Oyun hızlı bir karşılaştırma:
Birinci ve ikinci durumlarda, nesne değil otomatik olarak açılmamış, gördüğünüz gibi iki "katmanlar" ({{...}}
) ise üçüncü durumda, gördüğünüz gibi tek bir katman ({...}
) çünkü nesne olmak, otomatik olarak açtı.
İlk durumda ve ikinci iki olay arasındaki fark ikinci iki dava optionalSquare
21 ** olarak ayarlanırsa, çalışma zamanı bir hata verecektir. İlk durumda sözdizimini kullanarak, böyle bir şey yapabilirsiniz:
if let sideLength = optionalSquare?.sideLength {
println("sideLength is not nil")
} else {
println("sidelength is nil")
}
&Quot;sıkı" kullanın; JavaScript, ...
Kabuk, " nedir; 2>&1 " dem...
Bir ınt32 için en büyük değer nedir?...
C kaynağı, dış "C" etkisi ned...
Çeşitli "eylem Oluştur&; Visual S...