Пользовательская инициализация для UIViewController в Swift с настройкой интерфейса в раскадровке
У меня проблема с написанием пользовательского init для подкласса UIViewController, в основном я хочу передать зависимость через метод init для viewController, а не задавать свойство напрямую, какviewControllerB.property = value
Поэтому я сделал пользовательский init для моего viewController и вызвал супер-назначенный init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
Интерфейс контроллера представления находится в раскадровке, я также сделал интерфейс для пользовательского класса своим контроллером представления. И Swift требует вызова этого метода init, даже если вы ничего не делаете в этом методе. Иначе компилятор пожалуется ...
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
Проблема в том, когда я пытаюсь вызвать мой пользовательский init сMyViewController(meme: meme)
это не инициирует свойства в моем viewController вообще ...
Я пытался отладить, я нашел в моем viewController,init(coder aDecoder: NSCoder)
сначала вызывается, затем вызывается мой пользовательский init. Однако эти два метода init возвращают разныеself
адреса памяти.
Я подозреваю, что что-то не так с init для моего viewController, и он всегда будет возвращатьсяself
сinit?(coder aDecoder: NSCoder)
, который не имеет реализации.
Кто-нибудь знает, как правильно сделать кастомный init для вашего viewController? Примечание: интерфейс моего viewController настроен в раскадровке
вот мой код viewController:
class MemeDetailVC : UIViewController {
var meme : Meme!
@IBOutlet weak var editedImage: UIImageView!
// TODO: incorrect init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override func viewDidLoad() {
/// setup nav title
title = "Detail Meme"
super.viewDidLoad()
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
editedImage = UIImageView(image: meme.editedImage)
}
}