繁体   English   中英

无法使用 SwiftUI 中的嵌套 JSON 数据获取到 function 的 ForEach 循环

[英]Can't get ForEach loop to function with nested JSON data in SwiftUI

在尝试使用 ForEach 在我的服务 model 数据中的联系人上创建一个列表时,我真的是在拉扯我的头发(而且我一开始并不多)。

model如下;

struct ServiceContract: Codable, Identifiable {
    let id: String
    let name: String
    let latitude: Double
    let longitude: Double
    let maplogo: String
    let customerName: String
    let postcode: String
    let serviceCompany: String
    let projectNumber: Int
    let renewalDate: String
    let contractTerm: Int
    let annualValue: Double
    let paymentTerms: String
    let relationship: String
    let geuOEM: String
    let additionalSpendToDate: Double
    let type: String
    let contacts: Contacts
    let service: [String]
    let notes: String
    
    // Computer Property
    var location: CLLocationCoordinate2D {
        CLLocationCoordinate2D(latitude: latitude, longitude: longitude)
    }
}

struct Contacts: Codable {
    let contact: [Contact]
}

struct Contact: Codable {
    let contactFirstName: String
    let contactLastName: String
    let contactNumber: String
    let contactEmailAddress: String
}

所以基本上每个服务合同(确实符合 Identifiable)可以有多个联系人。 这是通过使用几个额外的结构来实现的。

那么问题来了。 我想简单地为特定服务合同创建每个联系人的列表,但我无法将 ForEach 获取到 function,因为使用.id 不起作用,我不能像这样使用 serviceContract.contacts.contact不符合可识别的。

有任何想法吗?

以下代码摘录;

VStack {
    ForEach(serviceContract.contacts.contact) { cont in
        Text("\(cont.contactFirstName)")
    } //: LOOP
}

serviceContract.contacts中的每个联系人都必须是唯一的。 如果contactNumber是唯一的,那么您可以这样做

ForEach(serviceContract.contacts.contact, id: \.self.contactNumber)

如果Contact中没有一个字段是唯一的,那么你可以让整个Contact符合Hashable (这将需要一些额外的代码),然后使用整个Contact实例作为标识符:

ForEach(serviceContract.contacts.contact, id: \.self)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM