Der Leitfaden zur Swift-Programmiersprache hat das folgende Beispiel:
class Person {
let name: String
init(name: String) { self.name = name }
var apartment: Apartment?
deinit { println("\(name) wird deinitialisiert") }
}
class Apartment {
let number: Int
init(number: Int) { self.number = number }
var tenant: Person?
deinit { println("Apartment Nr. \(number) wird deinitialisiert") }
}
var john: Person?
var number73: Apartment?
john = Person(name: "John Appleseed")
number73 = Apartment(number: 73)
// Aus dem Leitfaden "The Swift Programming Language" von Apple (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/AutomaticReferenceCounting.html)
Dann, wenn das Apartment der Person zugewiesen wird, benutzen sie ein Ausrufezeichen, um die Instanz "auszupacken":
john!.apartment = number73
Was bedeutet es, eine Instanz "auszupacken"? Warum ist es notwendig? Wie unterscheidet es sich davon, einfach folgendes zu tun:
john.apartment = number73
Ich bin ganz neu in der Swift-Sprache. Versuche nur, die Grundlagen zu verstehen.
UPDATE:
Das große Puzzlestück, das mir fehlte (nicht direkt in den Antworten angegeben - zumindest nicht zum Zeitpunkt des Verfassens dieses Beitrags), ist, dass wenn man Folgendes tut:
var john: Person?
das NICHT bedeutet, dass "john
vom Typ Person
ist und vielleicht nil sein könnte", wie ich ursprünglich dachte. Ich habe einfach missverstanden, dass Person
und Person?
vollständig separate Typen sind. Sobald ich das verstanden hatte, ergaben alle anderen ?
, !
Verwirrungen und die großartigen Antworten unten viel mehr Sinn.