Руководство по языку Swift Programming Language имеет следующий пример:
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 "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:
Большая часть загадки, которую я отсутствовала (не прямо сказано в ответах - по крайней мере, не на момент написания этого) заключается в том, что когда вы делаете следующее:
var john: Person?
что НЕ означает, что "john
имеет тип Person
, и это может быть ноль", как я изначально думал. Я просто недопонимал, что Person
и Person?
являются полностью отдельными типами. Как только я понял это, все другие безумие ?
, !
и великие ответы ниже дали больше смысла.