Пользовательская инициализация для 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)
    }

}

Ответы на вопрос(6)

Ваш ответ на вопрос