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 的语言很陌生.只是想把基本的东西记下来.
UPDATE:
The big piece of the puzzle that I was missing (not directly stated in the answers - at least not at the time of writing this) is that when you do the following:
var john: Person?
这并不意味着"john
是Person
型,可能是零",正如我最初所想.我只是误解了Person
和Person?
是完全不同的类型.一旦我明白了这一点,所有其他的?
!
疯狂,以及下面伟大的答案,都变得更有意义.