Come posso evitare di ripetere codice tra i miei inizializzatori? Voglio che dataFormatter rimanga una costante.Swift evitare di ripetere il codice nell'inizializzatore
let dateFormatter: NSDateFormatter
init() {
dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .MediumStyle
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .MediumStyle
super.init(coder: aDecoder)
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
dateFormatter = NSDateFormatter()
dateFormatter.dateStyle = .MediumStyle
dateFormatter.timeStyle = .MediumStyle
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
per essere pigro, è necessario aggiungere il prefisso pigro qui giusto? e cambia let a var. altrimenti la logica di formattazione della data non sarà lassista, ma verrà invece chiamata ogni volta che vi si accede. –
No, è possibile utilizzare entrambi i moduli, l'ho appena testato in un parco giochi. – vadian
'NOTA È sempre necessario dichiarare una proprietà lazy come variabile (con la parola chiave var), poiché il suo valore iniziale potrebbe non essere recuperato fino al completamento dell'inizializzazione dell'istanza. Le proprietà costanti devono sempre avere un valore prima che l'inizializzazione sia completata e, pertanto, non possono essere dichiarate pigre. [Source] (https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/Properties.html) – Laffen