我在Helper类中有一个post请求,在收到响应时,我想设置一个委托和一个在我的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
类型'助手'上的错误没有会员' HelpersSettingsDelegate
所以我的问题是
为什么我的协议不起作用?
使用这种方法是否安全,或者某些数据在响应时间之间丢失(如果用户在运行委托方法之前离开页面)?
修改:如果我尝试使用protocol HelperDelegate { }
,则会强制我使用HelperSettingsDelegate.updateUploadedImageString(Self)
答案 0 :(得分:1)
所以,你想拥有一个可重复使用的组件" Helpers"实现异步函数,是否希望从表视图控制器中调用函数UITableViewController
的任何update(_:)
中使用它?
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
}
}