将包含已获取项目的简单列表转换为 SwiftUI
Convert a simple list with fetched items to SwiftUI
我正在将我拥有的包含通过完成块获取的项目的列表转换为 SwiftUI 列表。这是我目前正在使用的:
struct MoreView: View {
private let seasonArray = [Season]()
var body: some View {
List {
ForEach(seasonArray, id:\.self) { season in
Text(season.name)
}
}
}
private mutating func fetchSeasons() {
ContentManager().getSeasons() { response in
seasonArray = response.sorted { [=10=].year < .year }
// Reloaded tableview in UIKit here
}
}
}
在 fetchSeasons()
运行和 returns 之后用 seasonArray
变量填充列表的最佳做法是什么?
您可以为 seasonArray 设置 @State
属性 包装器并为其指定空默认值。
当您调用 fetchSeasons
函数时,它应该会自动重新加载您的视图,而无需隐式重新加载,因为 SwiftUI 会侦听 seasonArray 作为 @State
属性.
的更改
您应该将 ContentManager
实例化一次,作为常量。
struct MoreView: View {
private let contentManager = ContentManager()
@State private var seasonArray: [Season] = []
var body: some View {
List {
ForEach(seasonArray, id:\.self) { season in
Text(season.name)
}
}
}
private func fetchSeasons() {
contentManager.getSeasons() { response in
DispatchQueue.main.async {
self.seasonArray = response.sorted { [=10=].year < .year }
// Reloaded tableview in UIKit here
}
}
}
}
我正在将我拥有的包含通过完成块获取的项目的列表转换为 SwiftUI 列表。这是我目前正在使用的:
struct MoreView: View {
private let seasonArray = [Season]()
var body: some View {
List {
ForEach(seasonArray, id:\.self) { season in
Text(season.name)
}
}
}
private mutating func fetchSeasons() {
ContentManager().getSeasons() { response in
seasonArray = response.sorted { [=10=].year < .year }
// Reloaded tableview in UIKit here
}
}
}
在 fetchSeasons()
运行和 returns 之后用 seasonArray
变量填充列表的最佳做法是什么?
您可以为 seasonArray 设置 @State
属性 包装器并为其指定空默认值。
当您调用 fetchSeasons
函数时,它应该会自动重新加载您的视图,而无需隐式重新加载,因为 SwiftUI 会侦听 seasonArray 作为 @State
属性.
您应该将 ContentManager
实例化一次,作为常量。
struct MoreView: View {
private let contentManager = ContentManager()
@State private var seasonArray: [Season] = []
var body: some View {
List {
ForEach(seasonArray, id:\.self) { season in
Text(season.name)
}
}
}
private func fetchSeasons() {
contentManager.getSeasons() { response in
DispatchQueue.main.async {
self.seasonArray = response.sorted { [=10=].year < .year }
// Reloaded tableview in UIKit here
}
}
}
}