Swift:如何在UIViewController子类中初始化let常量

时间:2016-05-06 11:59:25

标签: ios swift initialization

我希望模型由实现开发人员传入,我希望它是强制性的。

let model: PagingTutorialModel

init(withModel model: PagingTutorialModel) {
    self.model = model
    super.init(nibName: nil, bundle: nil)
}

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
}

错误:属性' self.model'没有在super.init调用初始化

2 个答案:

答案 0 :(得分:3)

视图控制器实际上不具有let值,除非您为它们指定默认值。

let foo = 3

问题是,当我们从故事板初始化视图控制器时,iOS会使用init(coder:)初始化视图控制器。我们没有机会在初始化期间传递值,因此我们无法拥有let属性。

答案 1 :(得分:0)

原因是,在init?(coder:)中您还需要设置模型。根据您的设置,一种解决方案可能是陷入init?(coder:)

required init?(coder aDecoder: NSCoder) {
    fatalError("Not implemented")
}

但是这样做,您无法从故事板初始化此视图控制器。但在我看来,故事板仅用于原型设计。