gpt4 book ai didi

ios - 如何等待已在运行的功能完成

转载 作者:行者123 更新时间:2023-11-28 11:25:36 24 4
gpt4 key购买 nike

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

class NetworkHandler {
init() {
loadData()
}

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

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

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)/委托(delegate)通知目标类有关阶段

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)
}
}

在 Controller 中采用协议(protocol)并实现方法

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) { }

}

关于ios - 如何等待已在运行的功能完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58302935/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com