Как я могу отфильтровать массив для обновления таблицы? - PullRequest
0 голосов
/ 07 февраля 2019

Здравствуйте, я действительно новичок в Swift, у меня возникла проблема после фильтрации массива, я не могу обновить его в своем табличном представлении

Я пытался использовать filter(), но я не знаю, как можноЯ обновляю tableview.reloadData() не работает.

Этот код написан в методе IBAction кнопки.Я хочу, чтобы при нажатии на кнопку обновлялось представление таблицы с фильтром, но при этом появлялось предупреждение, как показано ниже

Результат вызова 'filter' не используется

   @IBAction func oneTapped(_ sender: Any) {

    if staroneBtn.isSelected == true{

        staroneBtn.setBackgroundImage(#imageLiteral(resourceName: "1stared"), for: .normal)
        hotelArray.filter(){$0.star == 1}
        self.tbView.reloadData()

    } else if staroneBtn.isSelected == false{
        staroneBtn.setBackgroundImage(#imageLiteral(resourceName: "1star"), for: .normal)
    }
    staroneBtn.isSelected = !staroneBtn.isSelected
}

@IBAction func twoTapped(_ sender: UIButton) {

    if startwoBtn.isSelected == true{
        startwoBtn.setBackgroundImage(#imageLiteral(resourceName: "2stared"), for: .normal)
        hotelArray.filter(){$0.star == 2}
        self.tbView.reloadData()
}else if startwoBtn.isSelected == false{
        startwoBtn.setBackgroundImage(#imageLiteral(resourceName: "2star"), for: .normal)
    }
    startwoBtn.isSelected = !startwoBtn.isSelected

}

Поскольку я провел исследование, я обнаружил, что мне нужно изменить функцию CellforRows, но я не знаю, как это сделать.

Пожалуйста, помогите.

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
   guard let cell = tableView.dequeueReusableCell(withIdentifier: "myCell", for: indexPath) as? HotelTableViewCell else{return UITableViewCell()}

    cell.NameLbl.text = hotelArray[indexPath.row].hotelName

    return cell
}

Ответы [ 3 ]

0 голосов
/ 07 февраля 2019

filter - это функция более высокого порядка в swift, вы можете использовать ее для фильтрации массива.Ниже приведен код, который можно использовать для решения проблемы.

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

или

hotelArray = hotelArray.filter { $0.star == 1 }
0 голосов
/ 07 февраля 2019

Использование только одного массива не будет работать, как (hotelArray = hotelArray.filter {$0.star == 1})

Вам необходимо поддерживать 2 массива данных, иначе только отфильтрованные данные первого раза будут правильными, а не впоследствии.Возьмите один массив unFilteredHotelsData и второй массив FilterHotelsData для источника данных таблицы.

Затем вам нужно получать getFilteredData каждый раз, когда фильтр рейтинга изменяется как

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

и в методе делегата tableView(_:numberOfRowsInSection:) return filteredHotelsData.count

0 голосов
/ 07 февраля 2019

В самом предупреждении говорится, что вам нужно использовать результат фильтра, как показано ниже ...

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

Вам нужно сделать hotelArray как var.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...