【问题标题】:Using Protocol for Asynchronous Response使用协议进行异步响应
【发布时间】:2016-04-21 05:34:49
【问题描述】:

我的 Helper 类中有一个发布请求,在收到响应后,我想设置一个委托和一个函数以在我的 ViewController 上运行。然而,由于这是一个异步任务,我觉得它是否一定会成功。

我尝试设置协议和委托,但是我无法在 Helper 和 ViewController 之间设置正确的协议

我的 VC:

class MyTableViewController: UITableViewController, HelperDelegate {

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

我的助手:

protocol HelperDelegate : UITableViewController {
    func update(newUrl: String)
}

class Helpers: NSObject {

var HelpersSettingsDelegate : HelperDelegate?


...
 case .Success(let upload, _, _):
        upload.responseJSON { response in
            print("SUCCESS")
            debugPrint(response)
            let new = response.result.value!["success"]

            if let delegate = self.HelperSettingsDelegate {
                 delegate.update(new)
            }

         }

self.HelperSettingsDelegate 错误,类型“Helpers”没有成员“HelpersSettingsDelegate”

所以我的问题是

  • 为什么我的协议不起作用?

  • 使用这种方法是否安全,或者在响应时间之间可能会丢失一些数据(如果用户在运行委托方法之前离开页面)?


编辑:如果我尝试使用protocol HelperDelegate { },它会强制我使用HelperSettingsDelegate.updateUploadedImageString(Self)


【问题讨论】:

    标签: ios swift asynchronous delegates protocols


    【解决方案1】:

    那么,您想要一个实现异步功能的可重用组件“Helpers”,希望在任何从表视图控制器调用函数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
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-23
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-02
      • 2023-03-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多