2016-04-21 150 views
0

我在我的助手類中有一個post請求,並且在接收響應時,我想設置一個委託和一個函數在我的ViewController上運行。然而,因爲這是一項異步任務,所以如果肯定會做出來的話,我會感到懷疑。使用協議的異步響應

我試圖建立一個協議,委託,但是我無法設置我的助手和ViewController之間的適當協議

我的VC:

class MyTableViewController: UITableViewController, HelperDelegate { 

viewDidLoad() { 
    let myHelper = Helpers() 
    myHelper.HelpersSettingsDelegate = self 
} 
func update(newUrl: String { 
    // save string to db 
} 

我的助手:

error on self.HelperSettingsDelegate輸入'Helpers'has no member'HelpersSettingsDelegate

所以我的問題是

  • 爲什麼不是我的工作協議?

  • 使用此方法安全嗎?或者可能會在響應時間之間丟失一些數據(如果用戶在運行委託方法之前離開頁面)是否安全?


編輯:如果我嘗試使用protocol HelperDelegate { },它迫使我使用HelperSettingsDelegate.updateUploadedImageString(Self)


回答

1

所以,你希望有一個可重用的組件「助手」,它實現了一個異步函數,希望在從表視圖控制器調用功能update(_:)的任何UITableViewController中使用該功能?

恕我直言,最好的方法不需要代表委託人和協議。就在:

class Helper { 
    func fetchDataAsync(completion: (result: AnyObject?, error: ErrorType?) ->() { 
     ... 
    } 
} 

然後,在你的表視圖控制器,在使用的輔助類,例如在viewDidLoad任何功能:

override func viewDidLoad() { 
    super.viewDidLoad() 
    let helper = Helper(params) 
    helper.fetchDataAsync { (data, error) in 
     if let data = data { 
      let url = ... 
      self.update(url) 
     } 
     // handle error 
    } 
}