我想在收到请求的数据后呈现一个视图,像这样
var body: some View {
VStack {
Text("Company ID")
TextField($companyID).textFieldStyle(.roundedBorder)
URLSession.shared.dataTask(with: url) { (data, _, _) in
guard let data = data else { return }
DispatchQueue.main.async {
self.presentation(Modal(LogonView(), onDismiss: {
print("dismiss")
}))
}
}.resume()
}
}
Run Code Online (Sandbox Code Playgroud)
带有UI代码的业务逻辑是解决问题的良方。
您可以@ObjectBinding如下创建模型对象。
class Model: BindableObject {
var didChange = PassthroughSubject<Void, Never>()
var shouldPresentModal = false {
didSet {
didChange.send(())
}
}
func fetch() {
// Request goes here
// Edit `shouldPresentModel` accordingly
}
}
Run Code Online (Sandbox Code Playgroud)
而且视图可能像...
struct ContentView : View {
@ObjectBinding var model: Model
@State var companyID: String = ""
var body: some View {
VStack {
Text("Company ID")
TextField($companyID).textFieldStyle(.roundedBorder)
if (model.shouldPresentModal) {
// presentation logic goes here
}
}.onAppear {
self.model.fetch()
}
}
}
Run Code Online (Sandbox Code Playgroud)
工作方式:
VStack出现时,模型fetch函数调用和执行shouldPresentModal其设置为true,并在PassthroughSubjectshouldPresentModal设置为true,则执行其他UI绘制。我建议观看这个出色的WWDC 2019演讲: 通过Swift UI进行数据流
这使以上所有内容变得清晰。
| 归档时间: |
|
| 查看次数: |
744 次 |
| 最近记录: |