2017-05-05 168 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),它調用當所有圖像加載時想要發生的選擇器,否則在索引處獲取圖像,並在完成處理程序中增加索引並獲取下一個圖像調用相同的方法。