2014-11-21 71 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隱藏起來