arrays - 在 SwiftUI 中显示嵌套数组中的项目

标签 arrays foreach swiftui

我正在尝试解码 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)")
    }
 } 

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

最佳答案

您可以这样使用 ForEach:

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

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


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

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

关于arrays - 在 SwiftUI 中显示嵌套数组中的项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65100145/

相关文章:

arrays - 在关联数组上排序

java - 如何从数组列表创建数组

Java获取数组键

javascript foreach 与神秘变量

swiftui - 使用 SwiftUI 的 relativeWidth 仅在框架 View 内有效

arrays - [首先,...休息] : A spread argument must either have a tuple type or be passed to a rest parameter. ts(2556)

c# - Foreach 可以抛出 InvalidCastException 吗?

php在foreach中倒序时间段

ios - 在 SwiftUI 中使用 List 时如何使用 NavigationLink isActive 绑定(bind)?

swiftui - 使用 SwiftUI 在 WatchOS 中适配 UI