2015-09-19 12 views
5

Apple'ın Hızlı Programlama Dili (swift2) adlı Optional Chaining bölümünü okudum. Bu bölümde, numaralı telefondan numaralı isteğe bağlı soru işaretinin, bir fonksiyon adı ancak sol parantezden önce bahsetmemesi gerekmektedir.İşlev adından sonra isteğe bağlı zincirleme soru işareti

Ama this Apple'ın belgenin ('Delegasyonu'nun' bölümü) aşağıdaki hızlı kod gördüm:

//There is a question mark right after 'window' 
    if let fullScreenSize = myDelegate?.window?(myWindow, willUseFullScreenContentSize: mySize) { 
     print(NSStringFromSize(fullScreenSize)) 
    } 

bir fonksiyon adından sonra ancak sol parantez önce bir soru işareti kalmadan ne anlama gelir ?

+0

Kitabıma bakın: http://www.apeth.com/swiftBook/ch04.html#SECoptionalProtocol ve http://www.apeth.com/swiftBook/ch04.html#SECsuppressing – matt

cevap

9

bu kullanıldığı olduğu iki durum vardır:

  • bir protokol yöntemi kendisi optional işaretlenir, bu yüzden mi bilmiyorum protokolün uygulayıcısı bu yöntemi uygular.

  • Bir AnyObject öğesine bir ileti gönderiyoruz. AnyObject'e herhangi bir bilinen sınıf mesajını gönderebiliriz - bu, tip kontrolünü atar - ama sonra yine, gerçek nesnenin bu yöntemi uygulayıp uygulamadığını bilmiyoruz.

Yani bu soru işareti bu mesajı isteğe ve güvenle göndermek anlamına gelir. Alıcının, numaralı telefonu uygulamasının uygulanmadığı ortaya çıkarsa, iletiyi göndermeyin ve sıfırlayın. Alıcı , numaralı telefonu uygularsa, mesajı gönderin, ancak şimdi herhangi bir sonucu İsteğe bağlı olarak sarmamız gerekir (aksi takdirde ilk durumda nil'u iade edemedik).

Nesnelerin arkasında Object-C respondsToSelector: aranıyor. Bu nedenle, bu model sadece alıcı Objective-C'ye maruz kaldığında kullanılabilir. Temel olarak, bu Swift shorthand olarak ifade edilen bir Objective-C dil özelliğidir.

0

Protokol yöntemi isteğe bağlı olduğunda ve nesne üzerinde uygulanamadığında kullanılır. (Bu durumda, NSWindowDelegate protokolden opsiyonel window:willUseFullScreenContentSize: yöntemi)