使用异步响应协议

Using Protocol for Asynchronous Response

我在我的助手 class 中有一个 post 请求,在收到响应后,我想在我的 ViewController 上设置一个委托和一个函数到 运行 ].但是,由于这是一个异步任务,我怀疑它是否一定会成功。

我尝试设置一个协议和委托,但是我无法在我的助手和 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)
            }

         }

error on self.HelperSettingsDelegate Type 'Helpers' has no member 'HelpersSettingsDelegate

所以我的问题是


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


因此,您想要一个可重用的组件 "Helpers",它实现了一个异步函数,希望在任何 UITableViewController 中使用它,它从 table 视图控制器?

恕我直言,最好的方法不需要有代表和代表协议。就是这样:

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

然后,在您的 table 视图控制器中,在任何使用助手 class 的函数中,例如 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
    }
}