如何使用序列化为数据的响应数据处理程序(通过 AlamoFire 的 Swift 3)
Posted
技术标签:
【中文标题】如何使用序列化为数据的响应数据处理程序(通过 AlamoFire 的 Swift 3)【英文标题】:How to use Response Data Handler Serialized into Data (Swift 3 via AlamoFire) 【发布时间】:2017-08-04 04:42:00 【问题描述】:大家有什么建议吗?我想用func通过Alamofire调用API,但是遇到了错误 无法将类型“(DataResponse)->()”的值转换为预期的参数类型“(DataResponse)-> Void”
代码如下:
func authorize(emailAddress: String, password: String)
let base_url = ApiRoute.userLogin.url
let params: [String: Any]? = [
"email": emailAddress,
"password": password
]
let headers: HTTPHeaders = [
"Content-Type": CONTENT_TYPE,
"devtoken": API_KEY,
"userlang": USER_LANG
]
Alamofire.request(base_url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseJSON (response: DataResponse<ApiLoginResult>) in
switch(response.result)
case .success(_):
if let data = response.result.value
print(response.result.value)
break
case .failure(_):
print(response.result.error)
break
谁能告诉我如何在我的工作中实现这一点
// Response Data Handler - Serialized into Data
func responseData(queue: DispatchQueue?, completionHandler: @escaping (DataResponse<Data>) -> Void) -> Self
【问题讨论】:
这里发帖代码不是截图。 那么你的对象映射有问题吗? 是的,在对象映射中,如果我使用带有 (response : DataResponse) 到 (response) 的简单 alamofire,它就可以工作,但我需要传递数据,因为我正在使用对象映射 替换为responseJSON (response:DataResponse<Any>) in
检查我的答案。
【参考方案1】:
使用 ObjectMapper 你可以像下面那样映射对象。希望你能得到你的想法。
Alamofire.request(base_url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseJSON (response) in
switch(response.result)
case .success(_):
if let data = response.result.value
print(response.result.value)
//Object mapping
let loginResult = Mapper<ApiLoginResult>().map(data)
break
case .failure(_):
print(response.result.error)
break
【讨论】:
让 loginResult = Mapper().map(JSONObject: data) 谢谢兄弟【参考方案2】:GetRequest
在Alamofire
swift3 代码中
func getWebServicesFromAlamofireGetRequest()
self.myActivity.startAnimating()
Alamofire.request("http:xxxx.com", method: .get, parameters: ["":""], encoding: URLEncoding.default, headers: nil).responseJSON (response:DataResponse<Any>) in
self.myActivity.stopAnimating()
switch(response.result)
case .success(_):
if response.result.value != nil
let jsonResponce = response.result.value as! NSDictionary
print(jsonResponce)
break
case .failure(_):
print(response.result.error!)
break
【讨论】:
【参考方案3】:制作
(response : DataResponse<APILoginResponse>)
成为
(response)
它应该可以工作。
【讨论】:
【参考方案4】:检查以下 Alamofire 代码
let strURL:String = "http://xxxx"
let parameters: Parameters = ["keyword": "current_timestamp"]
Alamofire.request(strURL, method: .post, parameters: parameters, encoding: URLEncoding.default).responseJSON (response) in
print(response.data!)
print(response.result)
if let JSON = response.result.value
print("JSON: \(JSON)")
【讨论】:
以上是关于如何使用序列化为数据的响应数据处理程序(通过 AlamoFire 的 Swift 3)的主要内容,如果未能解决你的问题,请参考以下文章