我正在努力学习斯威夫特,我正在阅读这篇文章https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html。在VideoMode
类中,类似resolution
的{{1}}之类的对象被创建为Resolution
类的属性。之后,创建了VideoMode
类的let someVideoMode = VideoMode()
对象,并通过VideoMode
访问width
struct的Resolution
属性。这个概念对我来说很清楚。但是当我阅读这篇文章https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html#//apple_ref/doc/uid/TP40014097-CH21-ID245
在本文someVideoMode.resolution.width
中,只需创建Person
类的属性var residence: Residence?
即可。不创建对象。之后,创建Residence
类的对象john
并访问Person
类的属性。这里发生了什么?请告诉我,Residence
类的Person
类访问属性如何?
答案 0 :(得分:1)
在第二种情况下,我们有optional
属性,默认情况下它初始化为nil
。
如果我们看看可选类型是什么,我们将看到这是枚举:
enum Optional<T> {
case Some(T)
case None
}
它可以是Some
类似Int
或Residence
或None
,在这种情况下它的值为零。默认情况下,在您的示例中,它是None
,在此代码中来自文档:
if let roomCount = john.residence?.numberOfRooms { print("John's residence has \(roomCount) room(s).") } else { print("Unable to retrieve the number of rooms.") }
它会打印
“无法检索房间数。”
但是如果你这样初始化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.")
}
它会打印出来:
“John的住所有1个房间。”
因为可选类型enum
将返回Some(Residence)
,您将有权访问该值