[英]iOS swift Alamofire parsing, creating generic class to parse json data
我有要解析的JSON數據:
{
"data": {
"user_name": "JohP llDoe",
"email_address": "tozto@gmail.com"
},
"result": {
"code": 0
}
}
數據類型從Web服務更改為另一種,但一般結構始終相同。
因此,我使用EVReflection創建此通用類來解析數據:
class MyResponse<T>: EVObject {
var data : T?
var result : Result?
}
class Result: EVObject {
var message : String = ""
var code : Int = 0
}
對於數據:
class Preaccount : EVObject {
public var user_name : String = ""
public var email_address : String = ""
}
並調用Web服務,我創建了以下方法:
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.responseObject { (response: DataResponse<MyResponse<Preaccount>>) in
if response.result.isSuccess {
print(response.result.value!)
}
if response.result.isFailure {
let error : Error = response.result.error!
}
}
現在我訪問不暢:
有沒有一種方法可以創建通用方法並在參數中傳遞解析后的模型。
你可以試試這個
class MyResponse: EVObject {
var data : Preaccount?
var result : Result?
}
並處理響應數據
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.responseObject { (response: DataResponse) in
if response.result.isSuccess {
print(response.result.value!)
var myResponse = MyResponse(json:response.result.value!)
}
.......
}
最后,這是我針對該問題的解決方案:
struct MyResponse<T: Decodable>: Decodable {
var data : T?
var result : Result?
}
struct Result: Decodable {
let message : String?
let code : Int
let form_errors : [String: [String]]?
}
struct Preaccount : Decodable {
let user_name : String
let email_address : String
}
並調用Web服務:
func postRequest<T: Decodable>(url: String,
params : [String: Any]?,
returnType : T.Type)
{
Alamofire.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.responseDecodableObject { (response: DataResponse<FindoorResponse<T>>) in
//...
}
}
這是調用該方法的示例:
AlamofireHelper.shared().postRequest(url: CHECK_USERNAME_URL, params: parameters, returnType: Preaccount.self)
我建議改用Decodable
:
struct MyResponse<T: Decodable>: Decodable {
let data: T?
let result: Result?
}
struct Result: Decodable {
var message: String?
var code: Int
}
struct Preaccount: Decodable {
let user_name: String
let email_address: String
}
let data = """
{
"data": {
"user_name": "JohP llDoe",
"email_address": "tozto@gmail.com"
},
"result": {
"code": 0
}
}
""".data(using: .utf8)!
let result = try? JSONDecoder().decode(MyResponse<Preaccount>.self, from: data)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.