gpt4 book ai didi

json - 在 Swift 中解析 JSON

转载 作者:搜寻专家 更新时间:2023-11-01 06:15:41 25 4
gpt4 key购买 nike

我想解析从服务器接收到的 JSON 对象。有用于解析 JSON 和创建对象的代码。

class Transaction {

var id: String!
var amount: String!
var balance: String!
var detail: String!
var serial: String!
var time : String!
var type: String!


init(id: String, amount: String, balance: String, detail:String, serial: String, time: String, type: String ) {

self.id = id
self.amount = amount
self.balance = balance
self.detail = detail
self.serial = serial
self.time = time
self.type = type

}

func CreateTransactionObject(json: [String:Any]) -> Transaction? {

guard let id = json["id"] as? String,
let amount = json["amount"] as? String,
let balance = json["balance"] as? String,
let detail = json["detail"] as? String,
let serial = json["serial"] as? String,
let time = json["time"] as? String,
let type = json["type"] as? String

else {

return nil
}

let object = Transaction(id: id, amount: amount, balance: balance, detail: detail, serial: serial, time: time, type: type)

return object

}

当 guard 语句不返回 nil 时,这个工作正常。例如,当参数之一为 null 时,guard 语句返回 nil 并且对象无法创建。 如果任何对象未从服务器接收或获取 null,如何解析 JSON?

最佳答案

我建议使用专用的 init 方法。

以两种方式声明属性:

  • 如果空字符串或 0 可以表示无值,则将属性声明为非可选的并使用 nil 合并运算符(如前 5 个属性)。
  • 如果必须单独处理没有值,则将属性声明为标准可选(如timetype)

class Transaction {

var id: String
var amount: String
var balance: Int
var detail: String
let serial: String

var time : String?
var type: String?

init(json: [String:Any]) {
self.id = json["id"] as? String ?? ""
self.amount = json["amount"] as? String ?? ""
self.balance = json["balance"] as? Int ?? 0
self.detail = json["detail"] as? String ?? ""
self.serial = json["serial"] as? String ?? ""
self.time = json["time"] as? String
self.type = json["type"] as? String
}
}

使用 let(如 serial)将不会改变其值的属性声明为常量也是一个好习惯。初始化的工作方式相同。

关于json - 在 Swift 中解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45585787/

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