gpt4 book ai didi

Swift Codable 和模型数组

转载 作者:行者123 更新时间:2023-11-28 13:39:42 27 4
gpt4 key购买 nike

我有一个问题,我想我已经掌握了每个问题的基础知识,但不太确定如何将它们结合起来。

在 View Controller 中我有一个基本的 var 设置:

var shipments = [ShipmentModel]()

稍后,我发送了一个 Alamofire 请求:

let shipmentSearchEndpoint: String = "https://webservices.rrts.com/TrackWebApi/api/values/123456789"           
Alamofire.request(shipmentSearchEndpoint, method: .get)
.responseJSON { response in
if response.result.isSuccess{
do{
let decoder = JSONDecoder()
self.shipments = ???
}catch{
print(error)
}

self.tableView.reloadData()
}else{
print("Could not get results")
}
}

如您所见,我不太确定如何将响应数据编码到我的可编码模型中,如下所述:

// MARK: - PagedShipments
struct PagedShipments: Codable {
let searchResults: [ShipmentModel]

enum CodingKeys: String, CodingKey {
case searchResults = "SearchResults"
}
}


// MARK: - ShipmentModel
struct ShipmentModel: Codable {
let searchItem: String
let shipment: [ShipmentModelDetails]
let displayBOL, displayPOD, displayInvoice, displayInspection: Bool
let displayWI: Bool

enum CodingKeys: String, CodingKey {
case searchItem = "SearchItem"
case shipment = "Shipment"
case displayBOL = "DisplayBOL"
case displayPOD = "DisplayPOD"
case displayInvoice = "DisplayInvoice"
case displayInspection = "DisplayInspection"
case displayWI = "DisplayWI"
}
}


// MARK: - ShipmentModelDetails
struct ShipmentModelDetails: Codable {
let drAvail: Bool
let proNumber, pickupNumber: String
let customerNumber, bolNumber: Bool?
let bolReceived, podReceived: Bool
let poNumber: Bool?
let orderNumber, operationalStatus, status: String
let inspectionAvailable: Bool
let proDateTime, deliverDateTime: String
let specInst1, specInst2, specInst3, scac: Bool?
let location, dest, manifest: Bool?
let billToAccount: String
let pieces, weight: Int
let apptDateTime, deliveredDateTime, projectedDeliveryDateTime: String
let hawb: Bool?
let origin, consignee: Consignee
let pickupTerminal: PickupTerminal
let comments: [Comment]
let position: Int?
let referenceNumbers: [String]
let schedArriveEarly, schedArriveLate, actualDeparture, orderDate: String
let pickedUp: Bool

enum CodingKeys: String, CodingKey {
case drAvail = "DRAvail"
case proNumber = "ProNumber"
case pickupNumber = "PickupNumber"
case customerNumber = "CustomerNumber"
case bolNumber = "BOLNumber"
case bolReceived = "BOLReceived"
case podReceived = "PODReceived"
case poNumber = "PONumber"
case orderNumber = "OrderNumber"
case operationalStatus = "OperationalStatus"
case status = "Status"
case inspectionAvailable = "InspectionAvailable"
case proDateTime = "ProDateTime"
case deliverDateTime = "DeliverDateTime"
case specInst1 = "SpecInst1"
case specInst2 = "SpecInst2"
case specInst3 = "SpecInst3"
case scac = "Scac"
case location = "Location"
case dest = "Dest"
case manifest = "Manifest"
case billToAccount = "BillToAccount"
case pieces = "Pieces"
case weight = "Weight"
case apptDateTime = "ApptDateTime"
case deliveredDateTime = "DeliveredDateTime"
case projectedDeliveryDateTime = "ProjectedDeliveryDateTime"
case hawb = "HAWB"
case origin = "Origin"
case consignee = "Consignee"
case pickupTerminal = "PickupTerminal"
case comments = "Comments"
case position = "Position"
case referenceNumbers = "ReferenceNumbers"
case schedArriveEarly = "SchedArriveEarly"
case schedArriveLate = "SchedArriveLate"
case actualDeparture = "ActualDeparture"
case orderDate = "OrderDate"
case pickedUp = "PickedUp"
}
}


// MARK: - Comment
struct Comment: Codable {
let activityCode: String?
let statusComment, statusDateTime: String
let status, reason: String?

enum CodingKeys: String, CodingKey {
case activityCode = "ActivityCode"
case statusComment = "StatusComment"
case statusDateTime = "StatusDateTime"
case status = "Status"
case reason = "Reason"
}
}


// MARK: - Consignee
struct Consignee: Codable {
let name, address1, address2, city: String
let state, postalCode: String

enum CodingKeys: String, CodingKey {
case name = "Name"
case address1 = "Address1"
case address2 = "Address2"
case city = "City"
case state = "State"
case postalCode = "PostalCode"
}
}


// MARK: - PickupTerminal
struct PickupTerminal: Codable {
let terminalName, terminalTollFreePhone: String

enum CodingKeys: String, CodingKey {
case terminalName = "TerminalName"
case terminalTollFreePhone = "TerminalTollFreePhone"
}
}

从上面的终点你可以检索数据样本。基本上,“根”被标记为 SearchResults,然后在它下面是我调用的对象数组 ShipmentModel(s)

最佳答案

你可以解码如下,

do{
let result = try JSONDecoder().decode(PagedShipments.self, from: response.data!)
self.shipments = result.searchResults
print(shipments.first?.shipment.actualDeparture)
} catch{
print(error)
}

ShipmentModel 模型中,您需要将 shipment 类型从 Array 更改为 object 作为下面,

struct ShipmentModel: Codable {
var searchItem: String
var shipment: ShipmentModelDetails
var displayBOL, displayPOD, displayInvoice, displayInspection: Bool
var displayWI: Bool

enum CodingKeys: String, CodingKey {
case searchItem = "SearchItem"
case shipment = "Shipment"
case displayBOL = "DisplayBOL"
case displayPOD = "DisplayPOD"
case displayInvoice = "DisplayInvoice"
case displayInspection = "DisplayInspection"
case displayWI = "DisplayWI"
}
}

关于Swift Codable 和模型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56205340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com