swift3 中带有 objectmapper 的 alamofire 包装器 class 问题
Issue with the alamofire wrapper class with objectmapper in swift3
我正在尝试为 alamofire 加上 object 映射器维护一个包装器 class 像这样
import UIKit
import Foundation
import AlamofireObjectMapper
import Alamofire
import ObjectMapper
class APIManager: NSObject {
static let sharedInstance = APIManager()
public func performRequest<T: Mappable>(_requestURL: URL,method:HTTPMethod, headers: [String: String], parameter: [String: Any],success:@escaping (_ response: DataResponse<[T]>) -> Void, failure:@escaping (Error) -> Void) {
Alamofire.request(_requestURL, method: method, parameters: parameter, encoding: JSONEncoding.default, headers:headers)
.responseObject { (response: DataResponse<T>) in
print(response.result.value!)
switch(response.result) {
case .success(_):
guard response.result.value != nil
else {
print("Error")
return
}
DispatchQueue.main.async{
if response.result.isSuccess {
let responseValue = response.result.value
success(responseValue as! (DataResponse<[T]>)
)}
}
break
case .failure(_):
if let error = response.result.error as? URLError {
print("URLError occurred: \(error)")
failure(error)
} else {
print("Unknown error: \(String(describing: response.result.error))")
failure(response.result.error!)
}
break
}
}
}
}
我正在尝试从 class:
调用这个包装器
APIManager.sharedInstance.performRequest(_requestURL: loginAccessTokenURL!, 方法:.post, headers: Constants.Header, parameter:postParameters, 成功: DataResponse, 失败: nil )
我是从 viewdidload 调用的,但出现以下错误:
Please see the image for error
Success 是一个回调,因此将其替换为以下内容:
APIManager.sharedInstance.performRequest(_requestURL: loginAccessTokenURL!,
method: .post,
headers: Constants.Header,
parameters: postParameters,
responseType: AnyObject
success: { (response) in
//Call returned back success. Handle Response.
},
failure: nil)
编辑:
class BaseModel: Mappable {
required init?(map: Map) {
mapping(map: map)
}
func mapping(map: Map) {
}
}
class APIManager: NSObject {
static let sharedInstance = APIManager()
public func performRequest<T: Mappable>(_requestURL: URL,
method:HTTPMethod,
headers: [String: String],
parameter: [String: Any],
responseType: AnyObject,
success:@escaping (_ response: AnyObject) -> Void,
failure:@escaping (Error) -> Void) {
Alamofire.request(_requestURL,
method: method,
parameters: parameter,
encoding: JSONEncoding.default,
headers:headers).responseJSON { (response: DataResponse<T>) in
if response.result == .success {
success((responseType as? BaseModel)?.mapping(map: Map.init(mappingType: .fromJSON, JSON: response.result.value)))
}
}
}
}
我认为这就是您所说的。您的所有 JSON
个模型现在将是 subClasses
个 BaseModel
。您成功返回的对象将是初始化的 responseType
对象。在你的情况下 responseType
将是 GetTravelShopsResponse
.
我正在尝试为 alamofire 加上 object 映射器维护一个包装器 class 像这样
import UIKit
import Foundation
import AlamofireObjectMapper
import Alamofire
import ObjectMapper
class APIManager: NSObject {
static let sharedInstance = APIManager()
public func performRequest<T: Mappable>(_requestURL: URL,method:HTTPMethod, headers: [String: String], parameter: [String: Any],success:@escaping (_ response: DataResponse<[T]>) -> Void, failure:@escaping (Error) -> Void) {
Alamofire.request(_requestURL, method: method, parameters: parameter, encoding: JSONEncoding.default, headers:headers)
.responseObject { (response: DataResponse<T>) in
print(response.result.value!)
switch(response.result) {
case .success(_):
guard response.result.value != nil
else {
print("Error")
return
}
DispatchQueue.main.async{
if response.result.isSuccess {
let responseValue = response.result.value
success(responseValue as! (DataResponse<[T]>)
)}
}
break
case .failure(_):
if let error = response.result.error as? URLError {
print("URLError occurred: \(error)")
failure(error)
} else {
print("Unknown error: \(String(describing: response.result.error))")
failure(response.result.error!)
}
break
}
}
}
}
我正在尝试从 class:
调用这个包装器APIManager.sharedInstance.performRequest(_requestURL: loginAccessTokenURL!, 方法:.post, headers: Constants.Header, parameter:postParameters, 成功: DataResponse, 失败: nil )
我是从 viewdidload 调用的,但出现以下错误: Please see the image for error
Success 是一个回调,因此将其替换为以下内容:
APIManager.sharedInstance.performRequest(_requestURL: loginAccessTokenURL!,
method: .post,
headers: Constants.Header,
parameters: postParameters,
responseType: AnyObject
success: { (response) in
//Call returned back success. Handle Response.
},
failure: nil)
编辑:
class BaseModel: Mappable {
required init?(map: Map) {
mapping(map: map)
}
func mapping(map: Map) {
}
}
class APIManager: NSObject {
static let sharedInstance = APIManager()
public func performRequest<T: Mappable>(_requestURL: URL,
method:HTTPMethod,
headers: [String: String],
parameter: [String: Any],
responseType: AnyObject,
success:@escaping (_ response: AnyObject) -> Void,
failure:@escaping (Error) -> Void) {
Alamofire.request(_requestURL,
method: method,
parameters: parameter,
encoding: JSONEncoding.default,
headers:headers).responseJSON { (response: DataResponse<T>) in
if response.result == .success {
success((responseType as? BaseModel)?.mapping(map: Map.init(mappingType: .fromJSON, JSON: response.result.value)))
}
}
}
}
我认为这就是您所说的。您的所有 JSON
个模型现在将是 subClasses
个 BaseModel
。您成功返回的对象将是初始化的 responseType
对象。在你的情况下 responseType
将是 GetTravelShopsResponse
.