如何过滤数组以更新tableview?

时间:2019-02-07 05:05:40

标签: ios arrays swift xcode filter

你好,我是Swift的新手,在过滤数组后遇到问题,无法将其更新到tableview中

我尝试使用for k2,v2 in dic2.items(): if 'hockey' in v2: position = v2.index('hockey') for k3,v3 in dic3.items(): if k2==k3: weight = v3[position] print(weight) ,但是我不知道如何更新 [{'comp': ['akshay', 'swapnil', 'parth','juhi'], 'weight': 45}, {'comp': ['gaurav', 'geeta'], 'weight': 70}] 不起作用。

这些代码是用button的IBAction方法编写的。我想在点击按钮时使用过滤器更新表格视图,但收到如下警告

  

未调用“过滤器”的结果

filter()

就我的研究而言,我发现我需要更改CellforRows函数,但我不知道该怎么做。

请帮助。

tableview.reloadData()

3 个答案:

答案 0 :(得分:2)

警告本身说,您需要使用如下所示的过滤器结果...

 hotelArray = hotelArray.filter {$0.star == 1}

您需要将hotelArray设为var

答案 1 :(得分:1)

filter是高阶函数,可以快速使用它过滤出一个数组。以下是可用于解决问题的代码。

    hotelArray = hotelArray.filter { (obj) -> Bool in
        return obj.star == 1
    }

hotelArray = hotelArray.filter { $0.star == 1 }

答案 2 :(得分:0)

仅使用一个数组将无法像(hotelArray = hotelArray.filter {$0.star == 1}

否则,您需要维护2个数据数组,只有第一次过滤的数据才是正确的,之后才是正确的。 取一个unFilteredHotelsData数组,然后取第二个filterHotelsData数组作为tableview的数据源。

然后,每次更改评级过滤器时都需要getFilteredData

filteredHotelsData = unFilteredHotelsData.filter { $0.star == 1 }
tableView.reloadData()

并在委托方法tableView(_:numberOfRowsInSection:)中返回filteredHotelsData.count