2016-04-21 118 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 
    } 
}