gpt4 book ai didi

ios - 如何在 MVVM 中快速从一个屏幕导航到另一个屏幕

转载 作者:行者123 更新时间:2023-12-03 10:31:34 24 4
gpt4 key购买 nike

我在没有在 MVVM 中工作的情况下这样做,但是在 MVVM 中导航的最佳方法是什么,如果可能的话,请考虑这两种情况 - 导航有或没有数据,任何线索将不胜感激:谢谢

let st = UIStoryboard.init(name: "Register", bundle: nil)
let register = st.instantiateViewController(withIdentifier: "RegisterVC" ) as! RegisterVC
register.data = self.data
self.navigationController?.pushViewController(register, animated: true)`

最佳答案

这就是我一段时间以来在 View Controller 之间导航的方式,并且发现它非常有效。
我的 ViewController 通常每个都有一个 ViewModel 类,负责逻辑和/或数据加载或保存。我在每个 View Controller 中实例化这样的 View 模型属性:

class ExampleViewController: UIViewController {
lazy var viewModel = ExampleViewModel()

override func viewDidLoad() {
super.viewDidLoad()

// Load data to the controller via the view model here
viewModel.loadSomeData()
}

// This could be linked to a button from the UI builder
@IBAction func nextPressed(_ sender: Any) {
// Possibly use the view model to persist data here
viewModel.saveSomeData()

// Then navigate to the next controller
self.navigationController?.pushViewController(NextViewController(), animated: true)
}
}

在上面的示例中,NextViewController 将拥有自己的 View 模型来处理它的数据加载和持久性。如何将数据从 View 模型返回到 Controller 取决于您。如果它是简单的数据,您可以从函数中返回它,否则对于更复杂或异步的函数,您可以使用委托(delegate)或闭包。
将数据保留在 Controller 之外可以防止类变得过于臃肿,并减少 Controller 之间的依赖关系。

因此,您通常会在 View 模型下拥有某种数据层(可能不止一个)。这可能是 View 模型调用的 API,或者应用程序可能具有本地数据库。 View 模型将其与 Controller 和 View 分开。

在一个稍微不相关的旁注中,我也更喜欢将我的 Controller 作为 swift 和 .xib 文件,而不是在可能的情况下使用 Storyboard。我发现大 Storyboard往往变得非常缓慢,最终变得乏味进行更改。然后,您还可以像我在示例中所做的那样初始化 Controller ,并且不需要先创建 Storyboard 对象。但这只是个人喜好。

关于ios - 如何在 MVVM 中快速从一个屏幕导航到另一个屏幕,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60629809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com