gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 01:26:35 25 4
gpt4 key购买 nike

我正在努力学习 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com