当我打印一个数组时,它打印为空,但它包含项目

时间:2017-10-12 20:12:57

标签: ios arrays swift uitableview firebase

当我尝试从另一个文件打印一个文件中声明的数组时,它表示该数组为空。我添加了代码以异步方式返回值,但它不起作用。

我的第一个带有数组声明的文件和我从另一个调用的函数如下所示:

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和正确的项目。

先谢谢你。这让我很疯狂。

0 个答案:

没有答案