gpt4 book ai didi

swiftui - 在 SwiftUI 中从服务器下载数据的最佳实践

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

我的问题是一个概念性问题。

我有以下代码:

struct CategoriesList : View {

@State private var categories: [CategoryMetadata] = []

var body: some View {
NavigationView {
List(self.categories) { category in
NavigationButton(destination: PostsList(category: category)) {
CategoryRow(category: category)
}
}
}.navigationBarTitle(Text("Categorie"))
}
}

这只是使用元素(类别)列表组成我的 UI,并且我有一个与我的 View 关联的状态,该状态会在 View 更改时自动更新 View 。

这一切都很奇特和美好,但对我来说不清楚谁应该触发网络请求来填充模型

我理解了绑定(bind)和 @state 想法,但是,一般来说,我应该如何构建代码以在开始时拥有我需要的模型?

在旧方法中,我会在 viewDidLoad 中实现此行为,但使用 SwiftUI 的新范例,获取数据的最佳方法是什么?

最佳答案

SwiftUI 社区尚未真正建立任何最佳实践,因为该技术太新了。我的回答基于我在不同 WWDC19 session 上看到的内容。

首先,创建一个具有 categories 属性的 BindableObject。然后编写您的网络请求代码并将 self.categories 设置为您新下载的类别。

import SwiftUI
import Combine

final class CategoryStore: BindableObject {
var didChange = PassthroughSubject<Void, Never>()

var categories = [String]()

init() {
// TODO: Fetch categories from API
self.categories = ["A", "B", "C"]
}
}

然后,将 CategoryStore 添加到 View 并将其与 List 一起使用来迭代类别。

import SwiftUI

struct ContentView : View {
@ObjectBinding private var store = CategoryStore()

var body: some View {
List(store.categories.identified(by: \.self)) { category in
Text(category)
}
}
}

每当 categories 属性更新时,您的 UI 都会更新为新类别 (tysm Combine )

关于swiftui - 在 SwiftUI 中从服务器下载数据的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56690551/

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