gpt4 book ai didi

swift - 函数不等到数据下载完成

转载 作者:IT王子 更新时间:2023-10-29 05:35:03 25 4
gpt4 key购买 nike

我有以下从服务器下载图像的功能;

func getImageFromServerById(imageId: String) -> UIImage? {
let url:String = "https://dummyUrl.com/\(imageId).jpg"
var resultInNSDataformat: NSData!

let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) {(data, response, error) in
if (error == nil){
resultInNSDataformat = data
}
}
task.resume()
return UIImage(data: resultInNSDataformat)
}

该函数不会等待下载任务完成才返回图像。因此我的应用程序总是崩溃。关于如何等待下载有什么想法吗?

最佳答案

另一个答案不能很好地替代您已有的代码。更好的方法是继续使用 NSURLSession 的数据任务来保持下载操作异步,并将您自己的回调 block 添加到方法中。您需要了解下载任务 block 的内容在您从您的方法返回之前不会被执行。只需查看调用 resume() 的位置以获得进一步的证据。

相反,我推荐这样的东西:

func getImageFromServerById(imageId: String, completion: ((image: UIImage?) -> Void)) {
let url:String = "https://dummyUrl.com/\(imageId).jpg"

let task = NSURLSession.sharedSession().dataTaskWithURL(NSURL(string: url)!) {(data, response, error) in
completion(image: UIImage(data: data))
}

task.resume()
}

可以这样调用

getImageFromServerById("some string") { image in
dispatch_async(dispatch_get_main_queue()) {
// go to something on the main thread with the image like setting to UIImageView
}
}

关于swift - 函数不等到数据下载完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27208198/

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