将包含已获取项目的简单列表转换为 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
            }
        }
    }
}