从swift中的另一个类访问类类型变量

时间:2015-11-26 07:36:26

标签: ios swift oop

我正在努力学习斯威夫特,我正在阅读这篇文章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类访问属性如何?

1 个答案:

答案 0 :(得分:1)

在第二种情况下,我们有optional属性,默认情况下它初始化为nil。 如果我们看看可选类型是什么,我们将看到这是枚举:

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

它可以是Some类似IntResidenceNone,在这种情况下它的值为零。默认情况下,在您的示例中,它是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),您将有权访问该值