Swift Alamofire 2,如何获得错误?
在alamofire 2中,他们引入了结果类型:Swift Alamofire 2,如何获得错误?,swift,swift2,alamofire,Swift,Swift2,Alamofire,在alamofire 2中,他们引入了结果类型: Alamofire.request(.GET, URLString, parameters: ["foo": "bar"]) .responseJSON { request, response, result in switch result { case .Success(let JSON): print("Success with JSON: \(JSON)")
Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
.responseJSON { request, response, result in
switch result {
case .Success(let JSON):
print("Success with JSON: \(JSON)")
case .Failure(let data, let error):
print(error)
}
}
error属于ErrorType类型,其唯一成员是debugDescription,它打印:
可选(错误域=NSURLErrorDomain代码=-1009“Es besteht
anscheinend keine Verbindung zum互联网。”
UserInfo={NSUnderlyingError=0x135f4e7c0{Error
域=KCFerrorDomainCFN网络代码=-1009“(空)”
UserInfo={{kCFStreamErrorCodeKey=8,{kCFStreamErrorDomainKey=12}},
NSErrorFailingURLStringKey=myurl,
NSErrorFailingURLKey=myurl,
_kCFStreamErrorDomainKey=12,kCFStreamErrorCodeKey=8,NSLocalizedDescription=Es最适合Anscheinen和keine Verbindung zum
互联网.})
如何仅从错误中获取NSLocalizedDescription而不是整个调试消息
在alamofire 1中,错误类型为NSError,可通过以下方式获取错误消息:
error.localizedDescription
然而,在alamofire 2中,这似乎是不可能的。有什么想法吗?这是错误对象上的字符串:
error.localizedDescription
在本文中,说明了一种新的结果类型
public enum Result<Value> {
case Success(Value)
case Failure(NSData?, ErrorType)
}
ErrorType可以转换为N错误。试试这个:
Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
.responseJSON { request, response, result in
switch result {
case .Success(let JSON):
print("Success with JSON: \(JSON)")
case .Failure(let data, let error):
if let error = error as NSError? {
print(error.localizedDescription)
}
}
}
@MartinR唯一的错误是“debugDescription”,它是一个字符串。你是对的,我错读了这个问题,并假设
error
是一个NSError
。对不起!不,“类型ErrorType的值?没有成员‘localizedDescription’。谢谢,现在可以了。对你的答案稍加更正。编译器希望我使用“error as!”!NSError”而不是“错误为NSError”。@artworkadシ: 您使用的是哪个Xcode版本?我使用的是最终的Xcode 7.0(7A220),强制转换错误为!NSError
会向编译器发出警告:“从'ErrorType'强制转换为'NSError'总是成功;你的意思是使用'as'?“。我的错,你的答案是正确的。但是,如果我访问这样的错误:result.error,我必须使用as!@artworkadシ: 是,因为Result
的error
属性返回可选的:ErrorType?
。
Alamofire.request(.GET, URLString, parameters: ["foo": "bar"])
.responseJSON { request, response, result in
switch result {
case .Success(let JSON):
print("Success with JSON: \(JSON)")
case .Failure(let data, let error):
if let error = error as NSError? {
print(error.localizedDescription)
}
}
}