我正在使用MVVM,协调员和RxSwift open source tutorial。我正在构建协调器中的所有视图控制器和模型。 Controller对viewmodel有很强的参考,当设置viewmodel时,我想执行一些与UI相关的操作(使用属性observer didSet)。我面临的问题是didSet之前调用viewDidLoad导致崩溃。确保属性观察者didSet操作用户界面后viewDidLoad
精简版视图控制器的:
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)
}
我担心的是,即使调用manipulateUI在viewDidLoad中目前正在对我来说,应用程序将如果我忘记从我的协调员那里设置viewModel会导致崩溃,使我认为我正在使用一个脆弱的架构。我真的很喜欢从didSet更新userinterface,但它在viewDidLoad之前调用。
我知道这是一个简单的问题,但从架构的角度来看,它似乎很脆弱。任何建议,改进和意见都会很赞赏。
我喜欢第三种方法之后。谢谢您的帮助 –