我在为 UIViewController 的子类编写自定义 init 时遇到了问题,基本上我想通过 viewController 的 init 方法传递依赖关系,而不是像 viewControllerB.property = value
那样直接设置属性
因此,我为 viewController 创建了一个自定义 init,并且调用 super 设定 init
init(meme: Meme?) {
self.meme = meme
super.init(nibName: nil, bundle: nil)
}
视图控制器接口位于情节串连板中,我还将自定义类的接口作为我的视图控制器。Swift 需要调用这个 init 方法,即使您没有在这个方法中做任何事情。否则编译器会抱怨..。
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
问题是,当我尝试用 MyViewController(meme: meme)
调用我的自定义 init 时,它根本不会在 viewController 中调用 init 属性..。
我试图调试,我发现在我的 viewController 中,首先调用 init(coder aDecoder: NSCoder)
,然后调用我的自定义 init。但是这两个 init 方法返回不同的 self
内存地址。
我怀疑 viewController 的 init 出了问题,它总是返回 self
和 init?(coder aDecoder: NSCoder)
,而 init?(coder aDecoder: NSCoder)
没有实现。
有人知道如何正确地为 viewController 定制 init 吗? 注意: 我的 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)
}
}