【发布时间】:2014-07-23 23:24:36
【问题描述】:
The Swift Programming Language guide 有以下例子:
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
我对 Swift 语言非常陌生。只是想了解基础知识。
更新:
我遗漏的最大难题(未在答案中直接说明 - 至少在撰写本文时没有)是当您执行以下操作时:
var john: Person?
这并不意味着“john 的类型为 Person,它可能为 nil”,正如我最初所想的那样。我只是误解了Person 和Person? 是完全不同的类型。一旦我掌握了这一点,所有其他 ?、! 的疯狂,以及下面的精彩答案,都会变得更有意义。
【问题讨论】:
标签: swift optional forced-unwrapping