我正在使用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之前調用。
我知道這是一個簡單的問題,但從架構的角度來看,它似乎很脆弱。任何建議,改進和意見都會很讚賞。
我喜歡第三種方法之後。謝謝您的幫助 –