繁体   English   中英

在Swift 3中过滤自定义对象的“ 2D”数组

[英]Filtering “2D” Array of Custom Objects in Swift 3

因此,我的目标是为tableView创建一个搜索栏。 我的数据是2D对象数组“ GiftData”。 这是一个非常简单的对象,只有两个属性是“ gift:”和“ picture:”,我只想通过“ gift:”来搜索,这只是一个字符串。 它是2D数组的原因是因为我使用了一个单独的部分数组来划分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()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM