Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何监听Firebase任务完成情况?_Ios_Uitableview_Firebase_Firebase Realtime Database_Swift3 - Fatal编程技术网

Ios 如何监听Firebase任务完成情况?

Ios 如何监听Firebase任务完成情况?,ios,uitableview,firebase,firebase-realtime-database,swift3,Ios,Uitableview,Firebase,Firebase Realtime Database,Swift3,在这种情况下,他们的Firebase代码分散在控制器中。这使得Firebase返回时可以轻松地重新加载tableview,因为您的reload()代码位于现有的.observe()中 如果Firebase代码在类中,如何处理上述问题?我仍然需要重新加载tableview,但只有在Firebase返回后。看起来是这样的: f.performCompletedQuery() self.tableView.reloadData() f.performCompletedQuery()将执行,但代码路径

在这种情况下,他们的Firebase代码分散在控制器中。这使得Firebase返回时可以轻松地重新加载tableview,因为您的
reload()
代码位于现有的
.observe()

如果Firebase代码在类中,如何处理上述问题?我仍然需要重新加载tableview,但只有在Firebase返回后。看起来是这样的:

f.performCompletedQuery()
self.tableView.reloadData()
f.performCompletedQuery()
将执行,但代码路径将继续,而数据仍在从Firebase检索<代码>self.tableView.reloadData()将触发,表将为空(因为Firebase尚未返回)


我想我需要复制Firebase的observe,但在类中公开它,并利用现有的observe?看起来有点复杂。有更好的办法吗?也许只是块、显示和动画?

使用完成处理程序来实现这一点。 例如:

func queryOrdered(completion: (_ result: [Any]) -> ()) {
    // request here
    // getting response check on error
    // set completion for returned itmes if success
    completion([1, 2, 3])
}

// call the function
queryOrdered { [unowned self] (arr) in

    // get returned items
    self.myitems = arr
    // reload the table on main queue
    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
}

使用完成处理程序来实现这一点。 例如:

func queryOrdered(completion: (_ result: [Any]) -> ()) {
    // request here
    // getting response check on error
    // set completion for returned itmes if success
    completion([1, 2, 3])
}

// call the function
queryOrdered { [unowned self] (arr) in

    // get returned items
    self.myitems = arr
    // reload the table on main queue
    DispatchQueue.main.async {
        self.tableView.reloadData()
    }
}

考虑在performCompletedQuery()中添加completionBlock:吗?考虑在performCompletedQuery()中添加completionBlock:吗?不再使用.observe()?什么是
[无主的自我]
?现在开始工作了。唯一的问题是,我不需要完成块的参数,但我不知道如何删除它。你对此有什么想法吗?@4thSpace简单地将void函数作为param,如下所示:func queryOrdered(completion:()->()){completion()},[unowned self]用于省略self的retain循环。你不再使用.observe()?什么是
[无主的自我]
?现在开始工作了。唯一的问题是,我不需要完成块的参数,但我不知道如何删除它。你对此有什么想法吗?@4thSpace简单地将void函数作为param,如下所示:func queryOrdered(completion:()->()){completion()},[unowned self]用于省略self的retain循环。