ios - swift 从另一个类访问类类型变量

标签 ios swift oop

我正在努力学习 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 类的对象johnResidence 类的访问属性。这里发生了什么?请告诉我,Person 类如何访问 Residence 类的属性?

最佳答案

在第二种情况下,我们有可选属性,默认情况下它初始化为nil。 如果我们看看可选类型是什么,我们会发现它类似于枚举:

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

它可以是Some类型,例如IntResidenceNone,在这种情况下它是没有值(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/

相关文章:

ios - 使用 ios keychain 进行身份验证 - touch id(这可能吗)

ios - swift lazy var 使用 let constant

java - OOP - 谁可以访问公共(public)、私有(private)、 protected 变量?

java - 对父类(super class)属性的 Hibernate 查询

php - PHP中的类方法访问控制

ios - IOS 最好的 QR 阅读器库是什么?

ios - 如何调试 Apple 推送通知响应?

Swift SpriteNode 初始角度

ios - 通过在 iOS 中安装 Gmail 应用凭据登录 Google 帐户

ios - 无法从 Cocoapod Xcode 7.2.1 Swift 2.2 解析标识符