Was ist der Unterschied zwischen den folgenden Verwendungen? Ist da ein Unterschied?Swift - Unterschied zwischen Instanziierung auf Klassenebene und Instanziierung auf Methodenebene
class B { }
// usage 1
class A {
var b: B = B();
}
// usage 2
class A {
var b: B!
init() {
self.b = B()
}
}
Edit: Einige Antworten darauf hin, dass bei der Nutzung der Wert 2 nicht optional sein muss, da es einen Wert im initializer bekommt.
Haben Sie die Absicht, 'b' eine optionale zu sein bei der Nutzung 2, aber nicht in der Nutzung 1? –
FWIW, ich habe mich nur mit Swift beschäftigt und kenne die Antwort nicht, aber ich weiß es [macht eine Unterscheidung] (https://developer.apple.com/library/content/documentation/Swift/Conceptual/Swift_Programming_Language/ Initialisierung.html) zwischen "Standard" -Werten und Werten, die in Initialisierern zugewiesen wurden. Ich vermute, dass es Feinheiten gibt, die in einer Vererbungshierarchie zum Tragen kommen, wenn Sie sich die Reihenfolge von Superklassen/Unterklassen-Initialisierern anschauen. Zum Beispiel kann [Java & C# anscheinend äquivalenten Initialisierungscode in entgegengesetzter Reihenfolge aufrufen] (https://chrononaut.org/2008/02/18/java-vs-c-more-fun-with-initializers/). –
tat ich, aber ich sehe jetzt, dass es kein optionales sein musste. –