1
Вот мой класс с переопределения initsБыстрая инициализация - Почему вызывается несколько функций init?
class BottomView: UIView {
// MARK: - initilization
override init() {
println("init")
super.init()
setup()
}
override init(frame: CGRect) {
println("init frame")
super.init(frame: frame)
setup()
}
required init(coder aDecoder: NSCoder) {
println("init decoder")
super.init(coder: aDecoder)
setup()
}
func setup() {
println("setup")
}
}
я инициализировать в моем ViewController со следующим кодом
class ViewController: UIViewController {
let bottomView = BottomView()
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
bottomView.frame = CGRectMake(0.0, self.view.frame.height/2.0, self.view.frame.width, self.view.frame.height/2.0)
bottomView.autoresizingMask = UIViewAutoresizing.FlexibleWidth | UIViewAutoresizing.FlexibleHeight | UIViewAutoresizing.FlexibleTopMargin
self.view.addSubview(bottomView)
}
}
И мой выход
init
init frame
setup
setup
Так что мой вопрос, почему является init (фрейм :), вызываемый?
Хорошо, поэтому я изменил init на удобство переопределения init() и вызвал self.init (frame), а не super.init. Вы знаете, есть ли место, чтобы увидеть, что инициализаторы по умолчанию для каждого класса? Нужно было сделать то же самое с UITableView, но по умолчанию это init (frame: style :) – Sean
Почему вы вообще пытаетесь переопределить 'init()'? Похоже, вы просто хотите поместить свой код 'setup' в' init (frame:) 'и оставить' init() 'делать свою вещь по умолчанию. –
Я думал, что быстрое требует наличия определенных функций init(), даже если они переопределяют другие. Когда я удаляю функцию override init(), я получаю сообщение об ошибке «Отсутствует аргумент для параметра« frame »в вызове» на строке let bottomView = BottomView() – Sean