【发布时间】:2021-06-14 18:47:28
【问题描述】:
我有问题。我在视图之间传递一个字符串并使用它,从数据库下载数据。然后字符串转到文本。我想在 SwiftUI 中观察 Text(不是 TextField)或将 String 传递给 ViewModel。我知道如何在 Textfield 的情况下做到这一点,但在 Text 中有可能吗?
查看:
import SwiftUI
struct RefuelingListView: View {
@ObservedObject var viewModel: RefuelingListViewModel
var vehicle: Vehicle
var body: some View {
VStack(alignment: .leading) {
Text(vehicle.name)
.font(.system(size: 24))
.bold()
.frame(width: 380, height: 60, alignment: .topLeading)
.padding(.top, -20)
.padding(.leading, 10)
List(viewModel.refuelings) { refueling in
RefuelingListRow(refueling: refueling)
}
}
}
}
视图模型:
import Foundation
class RefuelingListViewModel: ObservableObject {
@Published var refuelings = [Refueling]()
private let persistenceService: PersistenceServiceProtocol
init(persistenceService: PersistenceServiceProtocol) {
self.persistenceService = persistenceService
}
【问题讨论】:
-
“观察”
Text没有真正意义,因为它没有变化的值。您已经可以通过vehicle.name访问Text中的内容。你只是问如何在视图模型上调用函数吗? -
是的,但我希望它在视图模型中。 vehicle.name 的数据来自另一个视图。
-
这两个路径一般是:1)在视图中使用
onAppear向视图模型发送值并加载数据2)在视图上使用init,这样你就可以显式发送一个视图模型的初始值(不推荐,因为init不应该做繁重的工作) -
你能给我举个例子吗?我的意思是 onAppear。
-
我用一个简单的例子添加了答案。我无法使用您的类型,因为它们不包含在此处,而且尚不清楚
vehicle.name的去向,但这应该足以让您开始使用。