Swift 4 完成处理程序:数组保持为空
Posted
技术标签:
【中文标题】Swift 4 完成处理程序:数组保持为空【英文标题】:Swift 4 completion handler: Array remains empty 【发布时间】:2020-07-01 20:25:18 【问题描述】:我在从 Firebase 获取用户时尝试填充一个数组。当我设置断点时,我可以看到,所有用户都附加到数组中,但是当调试器完成时,数组又是空的。
func firebaseRequest(completionHandler: @escaping (Result<[User], Error>) -> Void)
var tempFirebaseUsers = [User]()
self.firebaseFunctions.fetchUsers (userFB, error) in
if let user = userFB
print("User: ", user)
tempFirebaseUsers.append(user)
else if let error = error
completionHandler(.failure(error))
return
completionHandler(.success(tempFirebaseUsers))
return
【问题讨论】:
【参考方案1】:您调用完成处理程序的时间过早。当你的completionHandler(.success(tempFirebaseUsers))
运行时,tempFirebaseUsers.append(user)
还没有运行。
要解决此问题,请将对完成处理程序的调用移至回调中:
func firebaseRequest(completionHandler: @escaping (Result<[User], Error>) -> Void)
var tempFirebaseUsers = [User]()
self.firebaseFunctions.fetchUsers (userFB, error) in
if let user = userFB
print("User: ", user)
tempFirebaseUsers.append(user)
completionHandler(.success(tempFirebaseUsers))
else if let error = error
completionHandler(.failure(error))
return
return
【讨论】:
很好,谢谢!好的,completionHandler 中传递的数组现在包含值。问题是,completionHandler 会为每个用户调用,因为这个 fetchUsers 函数一次返回一个用户。我怎么说:等待发送 completionHandler,直到每个用户都被获取并附加到 tempFirebaseUsers 数组中? 您共享的 sn-p 中只有一个调用。但是如果你多次这样做,我通常会保留一个计数器,在循环内增加它,并且只有在我读取了所需数量的文档后才调用完成处理程序。这是一个这样做的例子:***.com/questions/62666162/… 我已经设法修复它。我重写了我的 firebaseFunctions.fetchUsers。非常感谢您帮助我完成处理程序!以上是关于Swift 4 完成处理程序:数组保持为空的主要内容,如果未能解决你的问题,请参考以下文章