使用异步响应协议
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
所以我的问题是
为什么我的协议不起作用?
使用这种方法是否安全,或者某些数据可能会在响应时间之间丢失(如果用户在 运行ning 委托方法之前离开页面)?
编辑:如果我尝试使用 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
}
}
我在我的助手 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
所以我的问题是
为什么我的协议不起作用?
使用这种方法是否安全,或者某些数据可能会在响应时间之间丢失(如果用户在 运行ning 委托方法之前离开页面)?
编辑:如果我尝试使用 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
}
}