列表以在 swiftUI 中显示来自服务器的数据

List to display data from server in swiftUI

我正在从服务器获取数据,我需要像在本网站上显示的那样显示它

来自服务器的数据是

  "OptionsListByItemId": [
        {
         "Choices": [
           {
             "ChoiceId": 1284226,
              "ChoiceName": "Hot",
            },
            { 
              "ChoiceId": 1284227,
              "ChoiceName": "Cool",
            }
          ],
          "OptionId": 187472,
          "OptionName": "Temperature"
      },
    
      { 
       "Choices": [
           {
             "ChoiceId": 1284223,
              "ChoiceName": "61%",
            },
            { 
              "ChoiceId": 1284224,
              "ChoiceName": "70%",
            }
          ],
          "OptionId": 187473,
          "OptionName": "Humidity"
 ]
}

我的模型是这样的

struct OptionsandChoices : Decodable , Identifiable{
    
    var id: String{OptionName}
    var OptionName: String!
    var OptionId: Int
    var Choices : [ChoiseList]
    
}

struct OptionsandChoiceList: Decodable{
    
    var OptionsListByItemId:[OptionsandChoices]  
}
struct ChoiseList: Decodable {
    var ChoiceName: String!
    var ChoiceId: Int
}

视图模型是

class ItemChoiceViewModel : ObservableObject{
 @Published var OpnChoice: OptionsandChoiceList = OptionsandChoiceList(OptionsListByItemId: [])
 // fetching data from server 
}

我的 swiftUI 视图像

struct ItemView: View {
 var OpnChoice = OptionsandChoiceList(OptionsListByItemId: [])
 @ObservedObject var choicevwModel = ChoiceViewModel()

struct Optionspage: View {
   var body: some View {
   List(choicevwModel.OpnChoice.OptionsListByItemId) {opn in 
       Text(opn.OptionName)
   }
}

我无法在列表中使用 ChoiceName

我怎样才能在 OptionName 下面的每一行中获得 choiceName 就像我给的 link

列表应该像

那样显示
 Temperature 
    Hot 
    Cold 
 
 Humidity
    61%
    70%

目前我排成两排

 Temperature
 Humidity

您要查找的属性位于Choices。要获得它的价值,请写以下内容:

opn.Choices[yourIndex].OptionName

此外,如果您想使用 @ObservedObject,请创建 OptionsandChoiceList class 而不是结构,并使其符合 ObservableObject 协议。最后,在此处声明 @Published 属性。

final class OptionsandChoiceList: ObservableObject, Decodable {
    @Published var OptionsListByItemId: OptionsandChoices = []  
}