我有一个结构如下:
struct Trip {
var status: Int?
var name: Int?
var id: Int?
var petId: [Int]
var timeStart: Int?
}
我使用此结构使用此函数从Json加载数据。
func startTrips( _ petIdss: [Int], callback: @escaping ApiTrip) {
let data = ["pets" : petIdss]
APIManager.instance.perform(call: .startTrip, with: data) { (error, json) in
if let error = error {
callback(error, nil)
} else if let data = json{
callback(nil, Trip(data))
}
}
}
但是当我尝试在回调中将其类型转换为Trip时callback(nil, Trip(data))
我要么
缺少参数
的参数
如果我按原样保留结构或初始化选项。如果我将结构中的所有参数转换为选项,我得
无法调用Trip类型的值进入类型Json。
所以我不确定这里有什么问题?
答案 0 :(得分:0)
如果您没有为结构指定初始化程序,则您唯一可以访问的是成员智能初始化程序。
您需要的是编写一个采用JSON数据参数的自定义初始化程序。此实现使用SwiftyJSON。
像这样:
struct Trip {
var status: Int?
var name: Int?
var id: Int?
var petId: [Int]
var timeStart: Int?
init(status: Int?, name: Int?, id: Int?, petId: [Int], timeStart: Int?) {
self.status = status
self.name = name
self.id = id
self.petId = petId
self.timeStart = timeStart
}
init?(_ json: JSON) {
if let petId = json["petId"].number as? Int {
self = Trip(status: json["status"].number as? Int, name: json["name"].number as? Int, id: json["id"] as? Int, petId: petId, timeStart: json["timeStart"] as? Int)
} else {
return nil
}
}
}