如何等待已在运行的函数完成



我有一个类可以执行一些网络请求。在init()我加载了一些初始数据。所以这个类看起来像这样:

class NetworkHandler {
init() {
loadData()
}
func loadData() {
// Do an asynchronous function to load initial data
}
}

我将此类的对象传递给视图控制器。在此视图控制器中,我想显示一个加载指示器,直到初始加载完成。接下来,我想显示一个正常的屏幕。所以像这样:

class viewController: UIViewController {
var networkHandler: NetworkHandler?
override func viewDidLoad() {
super.viewDidLoad()
if networkHandler.initialLoadIsDone {
// Show something
} else {
// Show a loading indicator
// Listen on networkHandlers initial load
// On initial load done: Show somethin
}
}
}

因此,第一步,如果初始加载是否完成,我可以使用 networkHandler 中的局部变量进行处理。但是由于我不调用初始加载函数,因此我无法使用 completionHandler 来等待初始加载完成。所以我想知道等待初始加载完成的最佳方法是什么?另外,我可以用这个替换局部变量解决方案吗?

感谢您的任何帮助

不要等待。不要通知。

例如,使用协议/委托通知目标类有关阶段的信息

protocol NetworkHandlerProtocol {
func didStartLoading()
func didFinishInitialLoading(with data: Data)
}
class NetworkHandler {
var delegate : NetworkHandlerProtocol
init(delegate : NetworkHandlerProtocol) {
self.delegate = delegate
}
func loadData() {
delegate.didStartLoading()
// Do an asynchronous function to load initial data
let data = // some Data object
delegate.didFinishInitialLoading(with: data)
}
}

在控制器中采用协议并实现方法

class ViewController: UIViewController {
lazy var networkHandler = NetworkHandler(delegate : self)
override func viewDidLoad() {
super.viewDidLoad()
networkHandler.loadData()
}
}
extension ViewController : NetworkHandlerProtocol {
func didStartLoading() { }
func didFinishInitialLoading(with data: Data) { }
}

最新更新