gpt4 book ai didi

swift - 如何使用 Async/Await swift 进行进度报告?

转载 作者:行者123 更新时间:2023-12-05 01:58:28 29 4
gpt4 key购买 nike

我有一个需要 2 个回调的函数。我想将其转换为异步/等待。但是我怎么能在不断返回进度的同时等待呢?我正在使用 https://github.com/yannickl/AwaitKit摆脱回调。

 typealias GetResultCallBack = (String) -> Void
typealias ProgressCallBack = (Double) -> Void


func getFileFromS3(onComplete callBack: @escaping GetResultCallBack,
progress progressCallback: @escaping ProgressCallBack) {

}

我是这样使用它的:

getFileFromS3() { [weak self] (result) in
guard let self = self else { return }

// Do something with result

} progress: { [weak self] (progress) in
guard let self = self else { return }

DispatchQueue.main.async { [weak self] in
guard let self = self else {return}
// Update progress in UI
}

}

这是没有进度报告的转换后代码的样子:

func getFileFromS3() -> Promise<String> {  
return async {

// return here
}
}

最佳答案

您可以使用与此类似的技术:

https://developer.apple.com/documentation/foundation/urlsession/3767352-data

从签名中可以看出...

func data(for request: URLRequest, 
delegate: URLSessionTaskDelegate? = nil) async throws
-> (Data, URLResponse)

...它是异步的,但它也需要一个委托(delegate)对象:

https://developer.apple.com/documentation/foundation/urlsessiontaskdelegate

如您所见,该委托(delegate)接收任务进度的回调。您可以声明类似的东西,从而将该信息从委托(delegate)传递给主要参与者和界面。

关于swift - 如何使用 Async/Await swift 进行进度报告?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68552757/

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