2014-11-21 69 views
0

假设我有以下代码:最佳实践添加到浏览

@IBAction func signInButtonPressed(sender: AnyObject) { 
    MBProgressHUD.showHUDAddedTo(self.view, animated: true) 

    if let url = NSURL(string: someURL) { 

      // ... 

      let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
       (data, response, error) in 

       if let httpError = error { 
        dispatch_async(dispatch_get_main_queue()) { 
         self.alert("Error", message: "Unable to sign in: \(httpError.localizedDescription)") 
        } 
        return 
       } 

       var deserializationError: NSError? 
       if let jsonData = NSJSONSerialization.JSONObjectWithData(data, options: nil, error: &deserializationError) as? [String: AnyObject] { 

        // ... 

        if let error = customer.error { 
         dispatch_async(dispatch_get_main_queue()) { 
          self.alert("Error", message: error) 
         } 
        } else { 
         // Show other view controller 
        } 
       } else { 
        if let unwrappedError = deserializationError { 
         dispatch_async(dispatch_get_main_queue()) { 
          self.alert("Error", message: "Unable to sign in: \(deserializationError)") 
         } 
        } 
       } 
      } 
      task.resume() 
     } else { 
      if let unwrappedError = serializationError { 
       self.alert("Error", message: "Unable to sign in: \(serializationError)") 
      } 
     } 
    } 
} 

什么是隐藏HUD加入self.view的正确方法?有没有更优雅的方式来做到这一点不是添加

dispatch_async(dispatch_get_main_queue()) { 
    MBProgressHUD.hideHUDForView(self.view, animated: true) 
    return 
} 

代码到每个ifelse分支机构?

在此先感谢。

回答

1

第一显示您的HUD后您的网址初始化,就在您的任务之前开始

if let url = NSURL(string: someURL) { 
    MBProgressHUD.showHUDAddedTo(self.view, animated: true) 
    // start the request here 

然后隐藏后立即回调块开始

let task = NSURLSession.sharedSession().dataTaskWithRequest(request) { 
       (data, response, error) in 
    dispatch_async(dispatch_get_main_queue()) { 
     MBProgressHUD.hideHUDForView(self.view, animated: true) 
    } 
    // here goes other logic 

你不必调用return后hud隐藏起来