簡體   English   中英

Swift2.0:如何通過try try獲取返回值和錯誤

[英]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庫可能會對您有所幫助。 在這里能找到它:

https://github.com/Alamofire/Alamofire

我認為你真的不需要返回BOOL值。 如果一切正常則應該是true ,否則就是false

使用Swift 2你應該使用dotrycatch 您可以捕獲錯誤並將其轉換為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM