SORU
3 HAZİRAN 2014, Salı


Ünlem işareti Swift dilinde ne anlama geliyor?

Swift Programlama Dili kılavuzu aşağıdaki örnek vardır:

class Person {
    let name: String
    init(name: String) { self.name = name }
    var apartment: Apartment?
    deinit { println("\(name) is being deinitialized") }
}

class Apartment {
    let number: Int
    init(number: Int) { self.number = number }
    var tenant: Person?
    deinit { println("Apartment #\(number) is being deinitialized") }
}

var john: Person?
var number73: Apartment?

john = Person(name: "John Appleseed")
number73 = Apartment(number: 73)

//From Apple's “The Swift Programming Language” guide (https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)

Kişiye Daire atarken, ünlem kullanıyorlar "örnek": . aç o zaman

john!.apartment = number73

Bunun için ne ifade ediyor "örnek"? aç Neden gereklidir? Nasıl sadece aşağıdaki şekilde farklıdır:

john.apartment = number73

Swift dili bu noktada herkes gibi çok yeniyim. Temelleri aşağı almak için çalışıyorum.


GÜNCELLEME:
Eksik olduğumu bulmacanın büyük parçası (doğrudan en azından bu yazının yazıldığı anda hem yanıtlara belirtilmemiş -) aşağıdakileri yaptığınızda bu

var john: Person?

"john Person ve nil olabilir tip", ben aslında düşündüm. anlamına gelmez Sadece Person Person? tamamen ayrı türler olduğunu anlamıyordum. Bir kez,*,* 14 ** 13 diğer delilik ve harika cevaplar aşağıda, çok daha mantıklı olduğunu kavradım.

CEVAP
3 HAZİRAN 2014, Salı


Bunun için ne ifade ediyor "örnek"? aç Neden gereklidir?

Ben işe kadarıyla (bu benim için çok yeni, çok.

Terim "sarılmış" gerektiğini ima ederbir hediye olarak İsteğe bağlı bir değişken düşünün, parlak kağıt, sarılmış olabilir (ne yazık ki!) boş olması.

"Sarılmış", İsteğe bağlı değişkeninin değeri iki olası değerleri ile bir numaralama (bir Boolean gibi). Bu numaralama değişken değeri (Some(T)) tutar, olsun ya da olmasın (None) açıklar.

Eğer bir değeri varsa, bu, "değişken (Some(T) T alma). açılması ile elde edilebilir

Nasıl john!.apartment = number73 john.apartment = number73 farklıdır? (Başka sözcüklerle ifade)

Eğer yazdığınız adı İsteğe bağlı bir değişken (örneğin metin john olmadan !), Bu ifade, "sarılmış" Sırala (Biraz/Hiç) değeri değil, kendisini (T). john Person bir örneği değil ve apartment bir üye yok:

john.apartment
// 'Person?' does not have a member named 'apartment'

Person gerçek değerini çeşitli şekillerde açılmamış

  • "zorla açılması": 28* *(Person değeri varsa, Eğer sıfır ise çalışma zamanı hatası verir)
  • "bağlama": 30* *eğer bir değeri varsa yürütür println () . isteğe bağlı
  • "isteğe bağlı zincirleme": john?.learnAboutSwift() Bu yöntem, eğer değeri varsa uydurma yürütür ()

Bu yollardan biri, nil durumda ne olması gerektiğini ve nasıl bağlı olarak açılacak seçtiğiniz sanırım. Bu tasarım dili güvenliği N-C geliştirir bitti sanırım hangi nil durum açıkça ele alınması, kolay nil davayla ilgilenmesi için unutmak olduğu) zorlar.

Güncelleme:

Ünlem işaretini de bildirmek için sözdizimi kullanılır "Örtülü Açılmamış Optionals".

Örneklerde şimdiye kadar john değişken var john:Person? ve İsteğe bağlı olarak ilan edilmiştir. Eğer bu değişkenin gerçek değerini istiyorsanız, yukarıdaki üç yöntemden birini kullanarak kaydırma gerekir.

Eğer var john:Person! yerine ilan etmiş olsaydı, değişken İsteğe bağlı (bu Apple'ın kitap başlığı ile bölümüne bakın) Örtülü olarak Sarılmamış olurdu. Değeri erişirken değişken bu tür paketini açmak için gerek yoktur, ve john ek sözdizimi olmadan kullanılabilir. Ama Apple'ın kitap diyor ki:

Örtülü olarak açılmamış optionals bir değişken daha sonraki bir noktada sıfır olma ihtimali bulunduğu durumlarda asla kullanılmamalıdır. Eğer bir değişkenin yaşamı boyunca nil değeri kontrol etmek için ihtiyacınız olursa her zaman normal isteğe bağlı bir tür kullanın.

Güncelleme 2:

Yazı "Interesting Swift Features" Mike Ash isteğe bağlı türleri için bazı motivasyon verir. Harika bir yazı açık bence.

Güncelleme 3:

Bu konuda başka bir yararlı maddeörtülü olarak isteğe bağlı açılmamışünlem işareti kullanmak için: "Swift and the Last Mile" Chris Adamson. Bu makalede, bu Apple tarafından pragmatik bir ölçü türleri nil içerebilir Objective-C çerçevelerini tarafından kullanılan bildirmek için kullanılan olduğunu açıklar. İsteğe bağlı (? kullanarak) ya da dolaylı olarak açılmamış bir türü (! kullanarak) ilan ettiği "güvenlik ve rahatlık arasında bir tercih yapmak zorunda". Örnekleri okumakla, Apple örtülü açılmamış olarak türleri bildirmek için, çağıran kodun daha rahat, ama daha az güvenli hale getirmek için seçti.

Belki Apple belki tarak ile kendi çerçeveleri içinde gelecek, çıkarma belirsizlik örtülü açılmamış ("muhtemelen asla yoktur"), parametreler yerine onlarla isteğe bağlı ("kesinlikle olabilir nil özellikle [umarım belgelenmiş!] "kötü niyetle veya standart isteğe bağlı olmayan ("hiç yok") bildirimleri, Objective-C kodu. tam davranış dayalı

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

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • hotstrikegently

    hotstrikegen

    26 AĞUSTOS 2011
  • tatermoog

    tatermoog

    2 AĞUSTOS 2006
  • thelonelyisland

    thelonelyisl

    23 Aralık 2005