如何解决将包含获取的项目的简单列表转换为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 { $0.year < $1.year }
// Reloaded tableview in UIKit here
}
}
}
在seasonArray
运行并返回后,用fetchSeasons()
var填充列表的最佳实践是什么?
解决方法
您可以为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 { $0.year < $1.year }
// Reloaded tableview in UIKit here
}
}
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。