udało mi się szeregować dane odpowiedzi na możliwym do kodowania obiektów.
Jak wszyscy mogliście być obeznani na przykład z konwersją obiektu Json [String: String]
. Ten obiekt Json należy przekonwertować na Data
, używając json.data(using: .utf8)!
.
Z Alamofire, nie jest łatwo dostać się, że dane (lub przynajmniej tego rodzaju danych, pracował dla mnie, już kompatybilny z .utf8
rzeczy), mogę tylko korzystać z tego już dostępnych funkcji
func responseData(queue: DispatchQueue?, completionHandler: @escaping (DataResponse<Data>) -> Void) -> Self
Następnie wystarczy wykorzystać te dane jako dane wejściowe dla Decoder
w completionHandler
let objek = try JSONDecoder().decode(T.self, from: data)
można również zrobić to w pewnym rodzajowe funkcji serializacji, z trochę uszczypnąć, z dokumentacji
Generic Response Object Serialization
do tej modyfikacji
func responseCodable<T: Codable>(
queue: DispatchQueue? = nil,
completionHandler: @escaping (DataResponse<T>) -> Void)
-> Self
{
let responseSerializer = DataResponseSerializer<T> { request, response, data, error in
guard error == nil else { return .failure(BackendError.network(error: error!)) }
guard let data = data else {
return .failure(BackendError.objectSerialization(reason: "data is not valid"))
}
do{
let objek = try JSONDecoder().decode(T.self, from: data!)
return .success(objek)
} catch let e {
return .failure(BackendError.codableSerialization(error: e))
}
}
return response(queue: queue, responseSerializer: responseSerializer, completionHandler: completionHandler)
}
struct Próbka
struct Fids: Codable {
var Status: Status?
var Airport: Airport?
var Record: [FidsRecord]
}
Użyj funkcji tędy
Alamofire.request("http://whatever.com/zzz").responseCodable { (response: DataResponse<Fids>) in
switch response.result{
case .success(let value):
print(value.Airport)
// MARK: do whatever you want
case .failure(let error):
print(error)
self.showToast(message: error.localizedDescription)
}
}
Czy Twoje pytanie jak przekształcić JSON podanych w tablica osoby (przykład podmiotu)? Lub tablica heterogenicznych obiektów? – nathan
Wiem, że jeśli mam '{" firstname ":" Tom "," lastname ":" Smith "," age ": 31}' i klasa osoby, którą mogę przekonwertować JSON na obiekt osoby w Swift przy użyciu kodowalnej . Ale nie jestem pewien, jak mogę to zrobić, jeśli mam taką tablicę JSON, którą otrzymuję od Alamofire. –
Nie jestem zaznajomiony z Alamofire (lub z tą biblioteką), ale jest https://github.com/Otbivnoe/CodableAlamofire –