【发布时间】:2024-01-12 16:59:01
【问题描述】:
我是 Swift 新手,无法弄清楚如何将 JSON 数组反序列化为 Swift 对象数组。我能够将单个 JSON 用户反序列化为 Swift 通道对象,但只是不确定如何使用 JSON 通道数组来实现。
我的 ResponseCollectionSerializable.swift
import Foundation
import Alamofire
public protocol ResponseObjectSerializable {
init?(response: HTTPURLResponse, representation: AnyObject)
}
extension Request {
public func responseObject<T: ResponseObjectSerializable>(completionHandler: Response<T, NSError> -> Void) -> Self {
let responseSerializer = DataResponseSerializer<T, NSError> { request, response, data, error in
guard error == nil else { return .Failure(error!) }
let JSONResponseSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONResponseSerializer.serializeResponse(request, response, data, error)
switch result {
case .Success(let value):
if let
response = response,
let responseObject = T(response: response, representation: value)
{
return .Success(responseObject)
} else {
let failureReason = "JSON could not be serialized into response object: \(value)"
let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason)
return .Failure(error)
}
case .Failure(let error):
return .Failure(error)
}
}
return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
}
}
public protocol ResponseCollectionSerializable {
static func collection(response: HTTPURLResponse, representation: AnyObject) -> [Self]
}
extension Alamofire.Request {
public func responseCollection<T: ResponseCollectionSerializable>(completionHandler: Response<[T], NSError> -> Void) -> Self {
let responseSerializer = DataResponseSerializer<[T], NSError> { request, response, data, error in
guard error == nil else { return .Failure(error!) }
let JSONSerializer = Request.JSONResponseSerializer(options: .AllowFragments)
let result = JSONSerializer.serializeResponse(request, response, data, error)
switch result {
case .Success(let value):
if let response = response {
return .Success(T.collection(response: response, representation: value))
} else {
let failureReason = "Response collection could not be serialized due to nil response"
let error = Error.errorWithCode(.JSONSerializationFailed, failureReason: failureReason)
return .Failure(error)
}
case .Failure(let error):
return .Failure(error)
}
}
return response(responseSerializer: responseSerializer, completionHandler: completionHandler)
}
}
我有一个问题: 使用未声明的类型“响应” 泛型类型“DataResponseSerializer”专用于太多类型参数(有 2 个但预期为 1 个)
我的模特:
import Foundation
import ObjectMapper
import SwiftyJSON
class AllCnannelModel : ResponseObjectSerializable, ResponseCollectionSerializable{
var id : Int
var name: String
var url : String
var picture : String
var category_id: Int
public required init?(response: HTTPURLResponse, representation: AnyObject) {
self.id = representation["id"] as! Int
self.name = representation["name"] as! String
self.url = representation["url"] as! String
self.picture = representation["picture"] as! String
self.category_id = representation["category_id"] as! Int
}
class func collection(response: HTTPURLResponse, representation: AnyObject) -> [AllCnannelModel] {
let postArray = representation as! [AnyObject]
return postArray.map({ AllCnannelModel(response:response, representation: $0)! })
}
}
问题:
【问题讨论】: