2015-11-26 155 views
0

我正在嘗試快速學習,並且正在閱讀本文https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html。在VideoMode類中,resolution類型的對象Resolution被創建爲VideoMode類的屬性。之後,VideoMode類的let someVideoMode = VideoMode()對象被創建並訪問widthResolution結構的屬性someVideoMode.resolution.width。這個概念對我來說很清楚。但我面臨的問題,當我看完這篇文章https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html#//apple_ref/doc/uid/TP40014097-CH21-ID245從swift中訪問另一個類的類類型變量

在這篇文章中Person類只需要創建一個屬性Residence類的var residence: Residence?。不創建對象。之後,創建一個對象johnPerson類和訪問Residence類的屬性。這裏發生了什麼?請告訴我,Person類訪問Residence類的屬性如何?

+0

回到[「基礎知識」(https://developer.apple.com/library/ios/documentation /Swift/Conceptual/Swift_Programming_Language/TheBasics.html#//apple_ref/doc/uid/TP40014097-CH5-ID309)並閱讀有關可選值的信息。 – molbdnilo

+0

不清楚你說的。你能解釋一下嗎? – Alamin

回答

1

在第二種情況下,我們有optional屬性,默認情況下它初始化爲nil。 如果我們在選購的類型是什麼,我們會看到這就像枚舉:

enum Optional<T> { 
    case Some(T) 
    case None 
} 

,它可以Some類型像Int例如或ResidenceNone,在這種情況下,它具有零值。並默認在您的例子是None並在此代碼文檔:

if let roomCount = john.residence?.numberOfRooms { 
    print("John's residence has \(roomCount) room(s).") 
} else { 
    print("Unable to retrieve the number of rooms.") 
} 

將打印

「無法檢索室的數量。」

但是,如果你的init residence這樣的:

let john = Person() 

// Init residence 
john.residence = Residence() 

if let roomCount = john.residence?.numberOfRooms { 
    print("John's residence has \(roomCount) room(s).") 
} else { 
    print("Unable to retrieve the number of rooms.") 
} 

它將打印:

「約翰的住處有1間房間(S)」

因爲可選類型enum將返回Some(Residence),你將有機會獲得它的值

+0

感謝您的回答。但我的問題不是可選的相關。我只想知道,第二篇文章如何訪問沒有聲明對象的類屬性? – Alamin

+0

這不是類屬性,它創建的對象的默認值爲零,因爲它的可選屬性 –

+0

再次感謝。現在,我清楚。 – Alamin