SORU
4 HAZİRAN 2014, ÇARŞAMBA


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

Original code

Cezary çözüm

Cezary's solution

Ü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
4 HAZİRAN 2014, ÇARŞAMBA


İ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:

playground

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")
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Associated Press

    Associated P

    18 EYLÜL 2006
  • Hallucination Land

    Hallucinatio

    14 Ocak 2011
  • Miles Fisher

    Miles Fisher

    8 NİSAN 2009