Mam bardzo ogólne pytanie o inicjalizację w Swift. W przeciwieństwie do Celu C, można teraz wywołać metodę init() bezpośrednio na deklaracji spoza moich funkcji: np.Gdzie zainicjować w 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)
}
}
W celu C wykonałbym inicjalizację w mojej funkcji.
Ale co jeśli chcę wywołać inicjalizator z parametrami, które nie są jeszcze ustawione? np. Chcę init z ramą, która jest obliczana w 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)
}
}
Nie chcę robić moje inicjacji w dwóch różnych miejscach w kodzie. Czy istnieje jakiś ogólny wzorzec dla inicjalizacji?
Dziękuję za tę wspaniałą odpowiedź! Jak byś to zrobił? – Michael
Nie ma twardych i szybkich reguł, ponieważ to naprawdę zależy od rodzaju klasy. Mówiąc, że zwykle deklaruję wszystkie stałe w linii (tzn. 'Let'), użyj' lazy var' dla wartości z domyślnymi wartościami, a następnie zainicjuj wszystkie zmienne tak wcześnie, jak to możliwe w cyklu życia klasy. Tak więc w klasach modelu (np. 'User' lub' Person') w init i 'viewDidLoad' of a' UIViewController'. – Bulwinkel