【问题标题】:Load more functionality from json data using SwiftUI使用 SwiftUI 从 json 数据加载更多功能
【发布时间】:2021-09-08 09:27:03
【问题描述】:

如果您从 json 数据源获取 ForEach 数据,则此处回答的这个问题的想法 Load more functionality using SwiftUI 不包括该选项。使用下面的代码实现所需结果的最佳方法是什么?

Group {

    HStack {
        Text("Recommended Events")
           .font(.title3)
           .foregroundColor(.white)
           .fontWeight(.bold)
                                    
          Spacer()
                                    
           Button(action: {
            
           }) {
             Text("Show all")
               .font(.title3)
               .foregroundColor(Color.white)
               .fontWeight(.bold)
               }
           }
            .padding(15)

    ForEach(recommendeds) { recommended in
                                    NavigationLink(destination: RecommendedEventsDetailView(recommended: recommended)) {
                                    RecommendedEventsView(recommended: recommended)
                                    }
                                }

}

【问题讨论】:

  • Apple SwiftUI Tutorials 中有关于如何执行此操作的示例。如果您下载较大项目的示例代码,您将找到示例
  • 我浏览了教程它仍然不同,因为它仅用于切换而不是加载更多按钮。我试过这个stackoverflow.com/questions/56489712/…,但我在哪里包含范围选项时遇到了问题。 ForEach(热点){ NavigationLink 中的热点(目的地:HotSpotsDetailView(热点:热点)){ HotSpotsItemView(热点:热点)}}
  • 范围?您的代码中没有任何内容涉及范围。您是在谈论过滤吗?
  • 我所说的范围是在stackoverflow.com/questions/56489712/… 此处提出的这个问题的答案中。我尝试在我的代码中使用它,但无法弄清楚如何使用该范围,因为我的数据来自本地 json 文件。
  • 您应该查看.filter,它可能是您数组中indices 的范围

标签: json foreach swiftui load


【解决方案1】:

使用 swift Codable 协议。 https://www.hackingwithswift.com/example-code/language/how-to-convert-json-into-swift-objects-using-codable 您必须定义一个 swift 结构并解码 json,并将解码后的 json 作为结构实例的值。

【讨论】:

  • 我使用 Codable Bundle Extension 因为我有很多 json 数据
  • extension Bundle { func decode(_ file: String) -> T { guard let url = self.url(forResource: file, withExtension: nil) else { fatalError("Failed在 Bundle 中定位(文件)") } guard let data = try? Data(contentsOf: url) else { fatalError("Failed to load (file) in Bundle") } let decoder = JSONDecoder() guard let decodedData = try? decoder.decode(T.self, from: data) else { fatalError("无法解码 Bundle 中的(文件)") } return decodedData } }
猜你喜欢
  • 2019-10-22
  • 1970-01-01
  • 2011-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-06-02
  • 1970-01-01
  • 2020-09-03
  • 2017-07-24
相关资源
最近更新 更多