快速编程语言指南 有以下例子:
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { println("\(name) is being deinitialized") }
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
var tenant: Person?
deinit { println("Apartment #\(number) is being deinitialized") }
}
var john: Person?
var number73: Apartment?
john = Person(name: "John Appleseed")
number73 = Apartment(number: 73)
//From Apple's “The Swift Programming Language” guide (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)
然后,当把公寓分配给这个人时,他们使用一个叹号来“展开实例”:
john!.apartment = number73
“展开实例”是什么意思?为什么要这样?这与仅仅做下列事情有什么不同:
john.apartment = number73
我刚学斯威夫特语,只是想把基本的东西记下来。
更新:
我所遗漏的最大问题(答案中没有直接说明——至少在写这篇文章的时候没有)是,当你做以下事情的时候:
var john: Person?
这并不意味着“ john
是类型 Person
,它可能是零”,因为我最初的想法。我只是误解了 Person
和 Person?
是完全独立的类型。一旦我掌握了这一点,所有其他的 ?
,!
疯狂,以及下面的伟大答案,使得更多的意义。