【发布时间】:2021-06-30 23:26:37
【问题描述】:
我主要开发 Android 应用程序,现在开始涉足 iOS 应用程序开发。我正在构建的应用程序用于学习目的,用于订购咖啡。流程是:
- 屏幕 1 选择混合 (MainViewController)
- 屏幕2选择尺寸(SizeViewController)
- 屏幕 3 选择风味 (FlavorViewController)
- 屏幕 4 显示总计和支付 (FinalViewController)
我从一个屏幕转到下一个屏幕。根据大小和口味更新总价,我想在每个屏幕上显示更新后的总价(屏幕 1 除外)。在最后的屏幕上,我想显示大小、味道,当然还有总的。我有一个在 sizeViewController 中实例化的 CoffeeModel。模型计算总价如下:
mutating func updateTotal() {
let coffeePrice = getPrice(for: selectedCup)
let flavorPrice = getFlavorPrice(for : selectedFavor)
total = coffeePrice + flavorPrice
delegate?.updateTotal(to: total)
}
然后 SizeViewController 可以通过委托获取价格。
现在的问题是当用户点击下一步并导航到 FlavorViewController 时,我如何使用相同的 CoffeeModal。我是否需要将此模型传递给准备功能中的下一个控制器? 如果我创建一个新的,那么我将失去总数,它将是一个单独的咖啡模型实例。
在 Android 中,我可以执行 sharedViewModel 之类的操作。 iOS中是否有类似的东西?有人可以指导我正确的方向,我应该遵循什么样的架构?
有趣的是我在写这个问题的时候实际上是在喝咖啡:)
【问题讨论】:
-
使用的是 uikit 还是 SwiftUI?您管理状态和模型的方式在这两个框架之间有所不同。无论如何,基本实现是您在视图之间传递的模型对象。而不是程序
updateTotal我将有一个计算变量,它根据模型的属性返回当前价格;大小、混合、风味等。计算总数的工作量并不是特别大。 -
我注意到您指的是视图控制器,因此您可能正在使用 uikit。如果您正在使用情节提要场景,那么您可以简单地将模型传递给
prepareForSegue。委托可能不是这里最好的方法,因为您有多个视图控制器对更新的价格感兴趣。 UiKit 没有内置绑定,因此使用程序代码在用户进行选择时简单地更新每个屏幕中的价格标签可能是最简单的。 -
我正在使用 UIKit。 SwiftUI 中有没有更好的方法。顺便说一句,我喜欢 SwiftUI 只是因为它很容易在其中制作 UI。
标签: ios swift architecture