【问题标题】:Display items from nested array in SwiftUI在 SwiftUI 中显示嵌套数组中的项目
【发布时间】:2021-03-13 22:39:07
【问题描述】:

我正在尝试解码 Yelp 的 JSON。在文件中有一个categories 的嵌套数组。有些企业有 1 个,有些企业可能有 3 个。

这是一个例子

{
"businesses": [
    {
        "id": "4jW-ZDeCPIl9aXvTWcATlA",
        "alias": "the-delaney-hotel-orlando",
        "name": "The Delaney Hotel",
        "image_url": "https://s3-media2.fl.yelpcdn.com/bphoto/fikUF4yC5J63f3EOCZ8uOw/o.jpg",
        "is_closed": false,
        "url": "https://www.yelp.com/biz/the-delaney-hotel-orlando?adjust_creative=s-hyKAjsx6P4UW-uqMn7aQ&utm_campaign=yelp_api_v3&utm_medium=api_v3_business_search&utm_source=s-hyKAjsx6P4UW-uqMn7aQ",
        "review_count": 13,
        "categories": [
            {
                "alias": "hotels",
                "title": "Hotels"
            },
            {
                "alias": "venues",
                "title": "Venues & Event Spaces"
            }
        ],
        "rating": 5.0,
        ...etc
    }
    
]

我的数据模型是这样设置的

struct BusinessesResponse: Codable {
    enum CodingKeys: String, CodingKey {
        case restaurants = "businesses"
    }

    let restaurants: [RestaurantResponse]
}

struct RestaurantResponse: Codable, Identifiable, Equatable {
    let id: String
    var name: String
    var image_url: String
    var is_closed: Bool
    var review_count: Int
    var rating: Double
    var distance: Double
    var price: String?
    var display_phone: String?
    var categories: [HotelCategory]
    var coordinates: HotelCoordinates
    var location: HotelLocation
    var transactions: [String]   
}

struct HotelCategory: Hashable, Codable {
    var title: String
}

struct HotelCoordinates: Hashable, Codable {
    var latitude: Double
    var longitude: Double
}

struct HotelLocation: Hashable, Codable {
    var address1: String
    var city: String
    var state: String
    var zip_code: String
}

我能够显示除categories 数组中的第一对以外的所有内容。我的猜测是我需要设置一个 ForEach 语句来显示该数组中的所有可用信息,但我不确定如何正确设置。

这是我目前的缩写形式

var category: [HotelCategory]


var body: some View {
    HStack {
       Text("\(category[0].title)")
    }
 } 

显然,这只会返回该嵌套数组的第一个子元素。我将如何动态解释具有多个子级的嵌套数组然后显示它们?

【问题讨论】:

    标签: arrays foreach swiftui


    【解决方案1】:

    你可以这样使用ForEach:

    ForEach(category, id: \.self) { category in
        HStack {
            Text("\(category.title)")
        }
    }
    

    注意:如果您不确定类别是否唯一,最好将HotelCategory 与Identifiable 一致并使用id: \.id。


    我还建议遵循约定并使用 复数 名称命名数组,即:

    var categories: [HotelCategory] // instead of `category`
    

    【讨论】:

      猜你喜欢
      • 2022-01-17
      • 2021-09-25
      • 2020-11-06
      • 1970-01-01
      • 2019-02-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多