Swift 4 完成处理程序:数组保持为空

Swift 4 completion handler: Array remains empty

我试图在从 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
    }

您调用完成处理程序的时间过早。当你的 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
}