我正在努力学习 Swift,我正在阅读这篇文章 https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ClassesAndStructures.html .在 VideoMode
类中,Resolution
类型的对象如 resolution
被创建为 VideoMode
类的属性。之后,VideoMode
类的对象 let someVideoMode = VideoMode()
被创建并访问 Resolution
结构的 width
属性通过 someVideoMode.resolution.width
。这个概念我很清楚。但是我在阅读这篇文章时遇到了问题https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/OptionalChaining.html#//apple_ref/doc/uid/TP40014097-CH21-ID245
在本文中,Person
类只是创建了 Residence
类的属性var residence: Residence?
。不是创建对象。之后,创建Person
类的对象john
和Residence
类的访问属性。这里发生了什么?请告诉我,Person
类如何访问 Residence
类的属性?
最佳答案
在第二种情况下,我们有可选
属性,默认情况下它初始化为nil
。
如果我们看看可选类型是什么,我们会发现它类似于枚举:
enum Optional<T> {
case Some(T)
case None
}
它可以是Some
类型,例如Int
或Residence
或None
,在这种情况下它是没有值(value)。默认情况下,在您的示例中它是 None
,在文档中的代码中:
if let roomCount = john.residence?.numberOfRooms { print("John's residence has \(roomCount) room(s).") } else { print("Unable to retrieve the number of rooms.") }
它会打印
"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's residence has 1 room(s)."
因为可选类型enum
将返回Some(Residence)
,您将可以访问它的值
关于ios - swift 从另一个类访问类类型变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33932942/