Swift编程语言指南中有以下示例:
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)
然后当分配公寓给某个人时,他们使用感叹号来"解包实例(instance):"
john!.apartment = number73
"解包实例"是什么意思?为什么需要解包?与仅执行以下操作有何不同:
john.apartment = number73
我对Swift语言非常陌生。只是在努力掌握基础。
更新:
我所缺少的重要一环(答案中没有直接说明,至少在撰写此文时没有)是当您执行以下操作时:
var john: Person?
这并不意味着"john
是 Person
类型,它可能为空(nil)", 我最初的想法是错误的。我只是误解了Person
和 Person?
是完全不同的类型。一旦我理解了这一点,所有其他的 ?
、!
混乱以及下面的伟大答案就变得更加合理了。