我是新来的。我对错误感到困惑。这个快速的代码会导致我无法理解的错误。它仅来自Apple文档“可选链接作为强制解包的替代方法”
class Person {
var residence: Residence?
}
class Residence {
var numberOfRooms = 1
}
let john = Person()
john.residence = Residence()
john.residence.numberOfRooms = 5
//错误在这里:'住所?'没有名为'numberOfRooms'的成员
答案 0 :(得分:4)
residence
的{{1}}属性是可选的,因此要访问其内容,您必须将其解包。您可以使用可选链接来执行此操作:
Person
这意味着:如果居住地不是零,则继续评估表达式右侧的内容,否则取消。
该错误似乎是无稽之谈,因为john.residence?.numberOfRooms = 5
^
确实有一个名为Residence
的属性。关键是numberOfRooms
是一个可选类型,而optionals是枚举的实例john.residence
- 它没有Optional<T>
属性。使用可选链接从枚举(即可选)中解包numberOfRooms
实例,因此错误消失,因为Residence
具有该属性。
Optional Chaining的更多信息(请注意这是问题中提到的文档)