Ho una domanda molto generale sull'inizializzazione in Swift. Diversamente dall'Obiettivo C è ora possibile chiamare init() direttamente alla dichiarazione al di fuori delle mie funzioni: ad es.Dove inizializzare in Swift?
class ViewController: UIViewController {
let myView: UIView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
myView.frame = getFrame()
myView.backgroundColor = UIColor.redColor()
self.view.addSubview(myView)
}
func getFrame() -> CGRect {
return CGRectMake(0, 0, 100, 100)
}
}
Nell'obiettivo C avrei eseguito l'inizializzazione nella mia funzione.
Ma cosa succede se voglio chiamare un inizializzatore con parametri che non sono ancora impostati? ad es. Voglio init con un telaio che viene calcolato in un func()
class ViewController: UIViewController {
//THIS IS NOT WOKRING
let myView: UIView = UIView(frame: getFrame())
override func viewDidLoad() {
super.viewDidLoad()
myView.backgroundColor = UIColor.redColor()
self.view.addSubview(myView)
}
func getFrame() -> CGRect {
return CGRectMake(0, 0, 100, 100)
}
}
Non voglio fare il mio inizializzazioni in due luoghi diversi nel codice. C'è qualche schema generale per le inizializzazioni?
Grazie per l'ottima risposta! Come lo faresti? – Michael
Non esiste una regola semplice e veloce in quanto dipende dal tipo di classe. Dicendo che normalmente dichiaro tutte le costanti in linea (ad esempio 'let'), uso' lazy var' per i valori con valori predefiniti e quindi inizializza tutte le variabili all'inizio del ciclo di vita della classe il più possibile. Quindi, nelle classi modello (ad es. 'Utente' o' Persona') nell'iniz e nel 'viewDidLoad' di un' UIViewController'. – Bulwinkel