显示来自 Observable Object SwiftUI 的列表

Posted

技术标签:

【中文标题】显示来自 Observable Object SwiftUI 的列表【英文标题】:Display a list from Observable Object SwiftUI 【发布时间】:2020-03-17 15:51:47 【问题描述】:

我正在尝试解码一些 JSON 并将其打印到列表中,目前收到此错误消息,

ForEach, Int, Text> 计数 (626) != 其初始计数 (0)。 ForEach(_:content:) 只能用于常量数据。而是将数据符合Identifiable 或使用ForEach(_:id:content:) 并提供明确的id

我可以通过访问 result[0] 打印特定票证 但我无法将所有结果返回到视图。

这是我的列表视图

struct WOListView: View 
    @EnvironmentObject var ticketData:ControlCenter


    var body: some View 

        VStack 
            Text(String(self.ticketData.jsonData?.result[0].ticketID?.ticketID ?? 0))

            List
                ForEach(0 ..< (self.ticketData.jsonData?.result.count ?? 0)) 
                    Text(String(self.ticketData.jsonData?.result[$0].ticketID?.ticketID ?? 0))
                

                
            
        

    


struct WOListView_Previews: PreviewProvider 
    static var previews: some View 
        WOListView().environmentObject(ControlCenter())
    

WorkOrderResults.swift

struct WorkOrderResults: Codable

    var result:[Result]
    enum CodingKeys:String, CodingKey
         case result = "Result"
     

    struct Result:Codable

        var ticketID:TicketID?
        var summary:Summary?
        var status:Status?
        var catagory:Catagory?

        enum CodingKeys:String, CodingKey
            case ticketID = "1"
            case summary = "22"
            case status = "96"
            case catagory = "164"
        

        struct TicketID:Codable 
            var ticketID:Int?
            enum CodingKeys: String, CodingKey
                case ticketID = "Value"
            
        

【问题讨论】:

【参考方案1】:

在这里找到了我的问题的答案! view-is-not-rerendered-in-nested-foreach-loop!

将 WOListView 更改为如下所示...

 var body: some View 

        VStack 
            Text(String(self.ticketData.jsonData?.result[0].ticketID?.ticketID ?? 0))


               ForEach(0 ..< (self.ticketData.jsonData?.result.count ?? 0), id: \.self) 
                    Text(String(self.ticketData.jsonData?.result[$0].ticketID?.ticketID ?? 0))


                
            
        

【讨论】:

以上是关于显示来自 Observable Object SwiftUI 的列表的主要内容,如果未能解决你的问题,请参考以下文章

将Observable的输出从Object转换为Array

IOS RxSwift 从 Observable 数组创建 Observable 数组

来自数组的 Observable 在 TypeScript 中不起作用

来自 URL 的 JSON 数据在 Html 网页中显示 [Object Object]

从 URL 下载嵌套 JSON 并制作 Observable Object SwiftUI,错误:“在调用中缺少参数 'from' 的参数”

http.get 中的 Observable 订阅