gpt4 book ai didi

ios - 如何在 SwiftUI 中使用 URLSession 请求后呈现 View ?

转载 作者:搜寻专家 更新时间:2023-10-31 22:04:04 25 4
gpt4 key购买 nike

我想在收到请求的数据后呈现一个 View ,像这样

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()
}

}

最佳答案

业务逻辑与 UI 代码混合在一起会带来麻烦。

您可以创建一个模型对象作为 @ObjectBinding,如下所示。

class Model: BindableObject {

var didChange = PassthroughSubject<Void, Never>()

var shouldPresentModal = false {
didSet {
didChange.send(())
}
}

func fetch() {
// Request goes here
// Edit `shouldPresentModel` accordingly
}
}

View 可能类似于...

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()
}
}
}

它的工作方式:

  • 当出现VStack时,调用并执行模型fetch函数
  • 当请求成功时,shouldPresentModal 设置为 true,并向 PassthroughSubject 发送一条消息
  • 作为该主题订阅者的 View 知道模型已更改并触发重绘。
  • 如果 shouldPresentModal 设置为 true,则会执行额外的 UI 绘制。

我推荐观看这个精彩的 WWDC 2019 演讲: Data Flow Through Swift UI

它使上述所有内容变得清晰。

关于ios - 如何在 SwiftUI 中使用 URLSession 请求后呈现 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56527840/

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