Ich habe eine Struktur wie folgt:
struct Trip {
var status: Int?
var name: Int?
var id: Int?
var petId: [Int]
var timeStart: Int?
}
Ich benutze diese Struktur, um Daten von Json mit dieser Funktion zu laden.
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))
}
}
}
Aber wenn ich versuche, es als Trip in den Rückruf zu werfen callback(nil, Trip(data))
Ich bekomme entweder
Fehlendes Argument für Parameter
Das ist, wenn ich die Struktur so belasse, wie sie ist, oder die Optionals initialisiere. Wenn ich alle Parameter in der Struktur in Optionale konvertiere, bekomme ich
Wert vom Typ Trip in Typ Json kann nicht aufgerufen werden.
Also ich bin mir nicht sicher, was hier falsch ist?
Antworten:
0 für die Antwort № 1Wenn Sie keinen Initialisierer für eine Struktur angeben, ist der einzige, auf den Sie zugreifen können, der Member Wise Initialiser.
Sie müssen einen benutzerdefinierten Initialisierer schreiben, der einen JSON-Datenparameter verwendet. Diese Implementierung verwendet SwiftyJSON.
So was:
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
}
}
}