arrays - 在 Swift 3 中过滤 "2D"自定义对象数组

标签 arrays swift object

所以我的目标是为我的 tableView 创建一个搜索栏。我的数据是一个二维对象数组“GiftData”。这是一个非常简单的对象,只有两个属性:“gift:”和“图片:”,我只想按“gift:”进行搜索,它只是一个字符串。 它是二维数组的原因是因为我使用单独的部分数组来划分 tableView。 关于问题,我一生都无法编译此过滤代码,请帮忙。 礼物数据对象:

class GiftData {

var gift = ""
var picture: UIImage

init (gift: String, picture: UIImage) {
    self.gift = gift
    self.picture = picture

}

func match (search: String) -> Bool {
    return (gift.caseInsensitiveCompare(search) == ComparisonResult.orderedSame)
}

static func createData () -> [[GiftData]] {
    return [[GiftData(gift: "necklace", picture: UIImage(named: "heart-emoji-png-2")!)], [GiftData(gift: "tie", picture: UIImage(named: "Hugging_Face_Emoji_2028ce8b-c213-4d45-94aa-21e1a0842b4d_large")!)], [GiftData(gift: "cane", picture: UIImage(named: "ios_emoji_kissing_face_with_closed_eyes")!)],  [GiftData(gift: "shoes", picture: UIImage(named: "Nerd_with_Glasses_Emoji")!)]]
}

过滤代码:

extension SecondViewController: UISearchResultsUpdating, UISearchDisplayDelegate {
func updateSearchResults(for searchController: UISearchController) {
    filterForSearch(searchText: searchController.searchBar.text!)
}
func filterForSearch (searchText: String) {
    giftResults = giftData.filter{(dataArray: [GiftData]) -> Bool in
        return dataArray.filter({(gift) -> Bool in
            return gift.match(search: searchText)})
    }
        giftTableView.reloadData()
}

它说“无法使用类型为“((GiftData) throws Bool)”的参数列表调用过滤器。 玩了几个小时后,我似乎无法理解我在这里处理的是什么。

最佳答案

问题出在这里:

func filterForSearch (searchText: String) {
    giftResults = giftData.filter{(dataArray: [GiftData]) -> Bool in
        return dataArray.filter({(gift) -> Bool in
            return gift.match(search: searchText)})
    }
        giftTableView.reloadData()
}

所以,您正在过滤字符串数组。您应该在第一个 filter{ 闭包中返回 Bool 值,但返回 GiftData,这是第二个(内部)filter{ 的结果 关闭🙃

如果giftResults[[GiftData]]:

func filterForSearch (searchText: String) {
    giftResults = giftData.map{
        return $0.filter({(gift) -> Bool in
            return gift.match(search: searchText)})
    }
    giftTableView.reloadData()
}

关于arrays - 在 Swift 3 中过滤 "2D"自定义对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41080229/

相关文章:

C++ 将基类和派生类对象存储在一起

java - HashMap/ArrayList 不会为每个键取多个值

ios - UIImageview 没有变圆

ios - UIDatePicker反射(reflect)选择的时间

javascript - 按属性过滤掉对象(不删除)

javascript - 如何在 JavaScript 中使用大数组

ios - 在数组中查找具有相同颜色的元素,如果它们彼此相邻则打印 true

php - 使用 PHP Gettext 无需安装语言环境

javascript - 如何打乱 Javascript 数组以确保每个索引都位于新数组中的新位置?

arrays - postgresql 域检查数组值