【发布时间】:2017-04-21 14:01:09
【问题描述】:
我正在使用 MVVM、Coordinators 和 RxSwift 开发 open source tutorial。我正在协调器中构建所有视图控制器和模型。控制器对视图模型有很强的引用,当设置视图模型时,我想执行一些与 UI 相关的操作(使用属性观察者 didSet)。我面临的问题是 didSet 在 viewDidLoad 导致崩溃之前被调用。
ViewController 的精简版:
class MessageVC: UIViewController {
var viewModel: MessageViewModel! {
didSet {
manipulateUI() // crashes
}
}
override func viewDidLoad() {
super.viewDidLoad()
manipulateUI() // works fine if setup is correct in coordinator
}
协调器精简版:
extension AppCoordinator {
convenience init() {
let rootVC = MessageVC() // actual construction from storyboard
let messages = Message.getMessages()
rootVC.viewModel = MessageViewModel(withMessage: messages)
}
我担心的是,即使在 viewDidLoad 中调用 manipulateUI 目前对我有用,如果我忘记从我的协调员那里设置 viewModel,应用程序将会崩溃,让我认为我正在使用脆弱的建筑。我真的很喜欢从 didSet 更新用户界面,但它是在 viewDidLoad 之前调用的。
我知道这是一个简单的问题,但从架构的角度来看它似乎很脆弱。非常感谢任何建议、改进和 cmets。
【问题讨论】: