Uitableview 从Swift中同步函数内的异步函数返回值
我知道以前有人问过这个问题,但所提供的答案根本没有回答我的问题 我有一个同步函数,numberOfRowsInSection用于UITableView:Uitableview 从Swift中同步函数内的异步函数返回值,uitableview,swift,Uitableview,Swift,我知道以前有人问过这个问题,但所提供的答案根本没有回答我的问题 我有一个同步函数,numberOfRowsInSection用于UITableView: func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { var returnValue = 0 self.getFavorites() { result in returnValue = resu
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
var returnValue = 0
self.getFavorites() { result in
returnValue = result.count
}
return returnValue
}
这是getFavorites()函数:
func getFavorites(completionHandler: (([NSString])->())){
let setter = self.xpcConnection?.remoteObjectProxy as FavoritesProtocol
setter.getFavorites({(reply) -> Void in
if var unwrappedReply = reply {
completionHandler(unwrappedReply)
}
})
}
现在numberOfRowsInSection函数返回0,因为该函数在异步函数完成之前返回。我理解这个概念
到目前为止,我发现的答案对我没有帮助,因为它们都没有真正说明如何使用completionHandler返回传递回的值,它们都有非常简单的示例,如:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
self.getFavorites() { result in
println("Result count: " \(result.count)")
}
}
那太好了,如果你所做的只是打印值,但我需要返回值
提前感谢您“无法”在同步函数中返回异步块的结果。我在“不能”上加了引号,因为有一些技巧可以让它发挥作用,但99.9%的时候你不应该这样做,而且只有在你确切知道自己在做什么的情况下
对于您所设置的,这是一种非常常见的情况,您只需要更改您的体系结构,以便在进行异步调用后重新加载表视图
设置一个变量:
var results: [String] = []
在视图中加载或在任何位置调用:
self.getFavorites() { results in
self.results = results
self.tableView.reloadData()
}
在您的柜台:
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return results.count
}
然后,在索引路径行的单元格中:
cell.textLabel.text = results[indexPath.row]