【发布时间】:2017-09-06 18:30:05
【问题描述】:
我是 Swift 的新手。当按下按钮时,我的视图控制器会调用 Web 服务类的方法。该方法依次调用 dataTask(),并提供一个完成处理程序:
let task = session.dataTask(with: request as URLRequest) { data, response, error in
guard error == nil && data != nil else {
print(error ?? "")
return
}
// print(JSON(data:data!))
print ("data : ", data ?? "-- no data --")
print ("response : ", response ?? "-- no response --")
print ("error : ", error ?? "-- no error --")
完成处理程序需要更新视图控制器的 GUI。但是,处理程序似乎只采用三个标准参数。如何将视图控制器引用传递给它?处理程序无法执行 self.someTextView.update(.....) 来更新 GUI,因为它在 Web 服务类中,而不是在视图控制器中。
有什么想法吗?谢谢。
【问题讨论】:
-
请添加更多代码,我不知道你把那个任务放在哪里
-
闭包从调用方法中捕获对象和值,所以使用
self或者在let task ...之前使用你需要的引用创建一个变量 -
假设你的视图控制器有一个对这个网络服务类的引用,在它们之间做一个委托或者一个回调函数。
-
谢谢。找到了解决方案。将视图控制器引用传递给 Web 服务类,并将其作为实例变量保存在那里,以供完成处理程序使用。
标签: swift parameters completionhandler