2017-05-05 125 views
0

我正在从Firebase存储下载图像并将其显示在桌面视图上。我一直用这个:同步下载Firebase存储

referenceOfImage.data(withMaxSize: 100 * 1024 * 1024) { data, error in 
    if let error = error { 
     print(error) 
    } else { 
     guard let data = data else { 
      print("no data") 
      return 
     } 
     guard let image = UIImage(data: data) else { 
      print("no image") 
      return 
     } 
     //use image 

    } 
} 

但是,根据文档,

异步下载的FIRStorageReference在内存中的NSData对象物体的任务。

我目前使用循环下载多个图像,如果我可以同步下载图像(否则循环会继续,任务将不完整),它会工作得更好。我怎样才能同步下载图像?谢谢!

回答

2

你不能。这些方法是异步的,因为它们需要服务器调用,并且使它们同步会阻塞主线程并导致非常差的用户体验和性能。也许你可以设置你的完成调用做一些递归?

将图片加载到一个函数中,该函数需要一系列要获取的东西,当前索引以及完成后要调用的选择器。有一个终止条件(index == array.count),它调用当所有图像加载时想要发生的选择器,否则在索引处获取图像,并在完成处理程序中增加索引并获取下一个图像调用相同的方法。