【问题标题】:how can I order tasks swift array appending我如何订购任务快速数组附加
【发布时间】:2023-04-07 16:44:01
【问题描述】:
public func downloadAllURL (for path: String, completion: @escaping (Result<[URL], Error>) -> Void) {

        let reference = storage.child(path)
        
        var urlArray: [URL] = []
        
        reference.listAll(complition: { datas, error in
            if error != nil  {
                completion(.failure(StorageErrors.failedToGetDownloadUrl))
                return
            }
            for storageRef in datas.items {
                storageRef.downloadURL{ url, error in
                    if error != nil{
                        completion(.failure(StorageErrors.failedToGetDownloadUrl))
                        return
                    }
                    if let url = url{
                        urlArray.append(url)
                        print(url)
                    }
                }
            }
        })
        print(urlArray.count)
        completion(.success(urlArray))
    }

print(urlArray.count) 总是返回 "0" 但 append 方法正在工作并且print(url) 工作正常。 问题是我的downloadAllURL 函数先打印“0”,然后再打印“urls”。

【问题讨论】:

  • listAll 和 downloadURL 都是异步的,并且在调用回调之前立即返回。
  • 如何让它们同步

标签: arrays swift firebase firebase-storage


【解决方案1】:

你必须在闭包内部调用completion

替换

})
print(urlArray.count)
completion(.success(urlArray))

    print(urlArray.count)
    completion(.success(urlArray))
})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-11-20
    • 2016-02-03
    • 1970-01-01
    • 2017-02-20
    • 2020-09-19
    • 2016-05-07
    • 2015-11-13
    相关资源
    最近更新 更多