当我尝试从另一个文件打印一个文件中声明的数组时,它表示该数组为空。我添加了代码以异步方式返回值,但它不起作用。
我的第一个带有数组声明的文件和我从另一个调用的函数如下所示:
class SearchManager {
var searchResults = [String]()
var listOfMosaics = [String]()
// Retrieves company list from Firebase
func getMosaicTitles(completionHandler: @escaping (_ mosaics: [String]) -> ()) {
Database.database().reference().child("mosaics").observeSingleEvent(of: .value, with: { (snapshot) in
guard let allMosaics = snapshot.value as? [String] else {
print("unable to unwrapp datasnapshot")
return
}
completionHandler(allMosaics)
})
}
// takes list of all mosaics and filters based on search text
func filterAllMosaics(searchText: String) {
searchResults = listOfMosaics.filter { $0.contains(searchText) }
}
// resets search results array
func resetSearch() {
searchResults = []
}
}
在AppDelegate中,我调用该函数并尝试异步处理它,但它似乎仍然不起作用:
searchManager.getMosaicTitles { (results) in
DispatchQueue.main.async {
self.searchManager.listOfMosaics = results
}
}
然后在我支持tableView控制器的文件中,我试着这样做:
extension SearchResultsTableViewController: UISearchBarDelegate {
func searchBarSearchButtonClicked(_ searchBar: UISearchBar) {
searchManager.resetSearch()
searchManager.filterAllMosaics(searchText: searchBar.text!)
tableView.reloadData()
print(searchManager.listOfMosaics)
print(searchManager.searchResults)
}
}
当我运行应用程序时,它打印上面的数组就像它们是空的一样,显然不会为每个单元格重新加载tableView和正确的项目。
先谢谢你。这让我很疯狂。