Implizit lazy statische Mitglieder in Swift
Mir ist gerade aufgefallen, dass static
Mitglieder von Swift structs
sind implizit lazy
.
Zum Beispiel, dieses ruft nur die init
einmal:
class Baz {
init(){
print("initializing a Baz")
}
}
struct Foo {
static let bar = Baz()
}
var z = Foo.bar
z = Foo.bar
Was ist die Logik hinter dieser?
Was ist, wenn ich will, dass die gegenüber Verhalten?
- Es gibt einige Gründe für die Wahl für die globalen Variablen faul hier: developer.apple.com/swift/blog/?id=7. Statische Mitglieder würde vermutlich ähnliche Gründe, außer noch weniger Grund für die on-startup Initialisierung (ich meine, was, wenn Sie noch nie verwendet, eine Art, es war gerade brachte über einen import? sollten alle statischen Variablen noch initialisiert werden, unabhängig davon verwenden?)
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
static
- Eigenschaft definiert einen "Typ " property", eine, die instanziiert wird, einmal und nur einmal. Wie Sie bemerken, geschieht dies träge, wie Statik, Verhalten sich wie Globale Variablen zu vermeiden. Und wie Die Swift-Programmiersprache: Eigenschaften sagt:Diese implizit lazy Verhalten ist, weil, wie der Swift-Blog: Dateien und Initialisierung sagt:
Sie bewusst so konzipiert, dass es der Weg um zu vermeiden, unnötig verzögern Sie den Start der app.
Wenn Sie instanziieren möchten die
static
Eigentum an irgendeinem besonderen Punkt in Ihrer app (anstatt dies zu können, wo es erstmals verwendet), verweisen Sie einfach auf diesesstatic
Eigentum an der früheren Stelle, und das Objekt wird initialisiert in dieser Zeit. Angesichts der Anstrengungen, die wir in der Reduzierung der Latenz beim starten unsere apps, die Sie in der Regel würde nicht wollen, dass diese synchron während der ersten Start der app, aber Sie können es tun, wo immer Sie wollen.