[英]Swift2.0: How to get both return value and error with do try catch
我在Objective-C中有一个函数。 如果发生错误,此函数始终返回值,事件:
-(NSString *)test:(NSError **)error;
我在Swift1中覆盖它如下,这样我仍然可以同时得到值和错误。
override func test(error: NSErrorPointer) -> String {
var error: NSError?
let result = super.test(&error)
...
}
但是现在在swift2中,我只能覆盖像这样的函数
override func test() throws -> String {
}
在这种情况下,如何同时获取值和错误?
我这样做是因为我需要覆盖AFNetworking中的一个函数。 需要返回值和错误。
- (id)responseObjectForResponse:(NSURLResponse *)response
data:(NSData *)data
error:(NSError *__autoreleasing *)error;
我知道这不是回答这个问题,虽然我可以提供有关Swift错误处理方式的指导,但这对你来说可能要容易得多。
AFNetworking有一个名为AlamoFire的专用Swift库。 如果您的项目是在Swift中,那么使用快速版本的AFNetworking库可能会对您有所帮助。 在这里能找到它:
我认为你真的不需要返回BOOL
值。 如果一切正常则应该是true
,否则就是false
。
使用Swift 2你应该使用do
, try
和catch
。 您可以捕获错误并将其转换为NSError
实例。
示例:
do {
try something()
// continue if something() returned true otherwise -> catch
} catch let error as NSError {
print(error.localizedDescription)
}
使用AFNetworking,您可以执行类似的操作,使用JSON中的错误消息更改NSError
本地化描述:
override func responseObjectForResponse(response: NSURLResponse!, data: NSData!) throws -> AnyObject {
do {
try self.validateResponse(response as! NSHTTPURLResponse, data: data)
} catch let error as NSError {
let json = JSON(data: data) // i'm using SwiftyJSON : https://github.com/SwiftyJSON/SwiftyJSON
if let errorMessage = json["error"].string {
var userInfo = error.userInfo
userInfo[NSLocalizedDescriptionKey] = errorMessage
throw NSError(domain: error.domain, code: error.code, userInfo: userInfo)
}
}
return try super.responseObjectForResponse(response, data: data)
}
也许有更好的方法来做到这一点但我开始使用Swift 2 :)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.