/ / Wert von Typ Trip in Type Json kann nicht aufgerufen werden - json, swift, struct, swift3, Compilerfehler

Wert vom Typ Trip in Type Json kann nicht aufgerufen werden - json, swift, struct, swift3, Compilerfehler

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 № 1

Wenn 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
}
}
}