Mentre giocavo un po 'con Swift, ho provato a scrivere una proprietà inizializzata readonly e pigra. Ho scritto rapidamente quella riga di codice solo per sapere che non è permesso.Lazy proprietà readonly in swift
// no valid Swift code.
lazy let foo : Int = { return 42 }()
si deve dichiarare proprietà pigri come var
. Il libro veloce afferma chiaramente che lascia con il pigro non è possibile per una buona ragione:
“Si deve sempre dichiarare una proprietà pigro come una variabile (con la parola chiave var), perché il suo valore iniziale potrebbe non essere recuperate fino a dopo l'inizializzazione dell'istanza completa. proprietà costanti devono sempre avere un valore prima inizializzazione viene completata, e quindi non può essere dichiarato come pigrizia.”
Supponendo desidero avere una proprietà artificiale sola lettura in rapida. Qual è il modo migliore per archiviarlo?
Il setter privato è sufficiente per me. Io uso spesso questo modello anche in C#. – MBulli
Penso che questo sia equivalente a '' 'private (set) lazy var foo = 42'''. Se si segna il setter come privato non ha senso dichiarare il getter solo allo scopo di omettere il setter. –
Non era un getter, è una pigra chiusura di istanziazione, ma non è necessario perché non contiene alcuna logica. Ecco perché 'private (set) lazy var foo = 42' funzionerà allo stesso modo. – Danchoys