我对有关Swift 2的新版Alamofire有疑问
var arr1 = [0, 1, false, '', 'zero', null];
var arr2 = arr1.filter(function (item) {
return !!item;
});
console.log(arr2); // [1, 'zero']
在本节中,我想将结果转换为NSDictionary。但是当我编译并设置断点时,调试器说dico是零。如果我使用debugDescription打印结果,它不是nil并包含我所期望的 如何转换Result变量?
答案 0 :(得分:56)
接受的答案很有效,但随着Alamofire 3.0.0的推出,有一些重大变化会影响这种实施。
migration guide有进一步的解释,但我将重点介绍与实际解决方案相关的内容。
Response
所有响应序列化程序(响应除外)都返回一个通用的响应结构。
Response type
结果类型是否已重新设计为不存储NSData的双通用类型?在.Failure
案例中。
另请注意,无论回复的内容如何,Alamofire都会将完成的任何请求视为成功。因此,您需要在.validate()
之前链接.responseJSON()
以查看.Failure
案例。
阅读更多相关信息here。
更新的代码:
let url = "http://api.myawesomeapp.com"
Alamofire.request(.GET, url).validate().responseJSON { response in
switch response.result {
case .Success(let data):
let json = JSON(data)
let name = json["name"].stringValue
print(name)
case .Failure(let error):
print("Request failed with error: \(error)")
}
}
供参考:
答案 1 :(得分:0)
您现在可以立即实现大多数必需的行为,而无需使用SwiftyJSON。我的OAuthTokenResponse是一个可编码的简单结构。 Alamofire库5.2.2可让您使用“ responseDecodable”进行响应
如果您说的结构看起来像这样:
struct OAuthTokenResponse : Codable
{
var access_token:String?
var token_type:String?
var expires_in:Int?
var scope:String?
}
然后在您的网络通话中(使用Alamofire)
let request = AF.request(identityUrl, method: .post, parameters: parameters, encoding: URLEncoding.httpBody)
request
.validate()
.responseDecodable { (response:AFDataResponse<OAuthTokenResponse>) in
switch response.result {
case .success(let data):
do {
let jwt = try decode(jwt: data.access_token!) // example
self.connected = true
print(jwt)
} catch {
print(error.localizedDescription)
self.connected = false
}
case .failure(let error):
self.connected = false
print(error.localizedDescription)
}
}
在上面的代码中,成功案例使用可解码协议自动反序列化JSON到您的结构中。任何错误都会导致错误案例被击中。