Реализация UISearchBar с UITableView - PullRequest
0 голосов
/ 18 апреля 2020

Итак, у меня есть приложение, которое позволяет пользователям выбирать фильмы из списка в табличном представлении (заполненном API), нажав на кнопку mov ie, чтобы просмотреть более подробную информацию. Я хотел бы реализовать панель поиска, чтобы пользователи могли искать определенные c фильмы, однако у меня возникли некоторые проблемы

Я предполагал, что следующая функция сделает фильмы доступными для поиска для следующей таблицы

 var newMovies: [NSDictionary] = []

...

 func searchBar() {

        let searchBar = UISearchBar(frame: CGRect(x: 0, y: 0, width: self.view.frame.width, height: 50))
        searchBar.delegate = self
        searchBar.showsScopeBar = true
        searchBar.tintColor = UIColor.lightGray
        self.tableView.tableHeaderView = searchBar
    }

    func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
        if searchText == "" {
            fetchMovies()
        }
        else {
            if searchBar.selectedScopeButtonIndex == 0 {
                newMovies = newMovies.filter({ (NSDictionary) -> Bool in
                    return NSDictionary.lowercased().contains(searchText.lowercased())
                })
            }
            else {

            }
        }
    }


 func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int{

        return newMovies.count
    }

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {



        let cell = tableView.dequeueReusableCell(withIdentifier: "MovieCell", for: indexPath)  as! MovieSearchTableViewCell
        let movie =  newMovies[indexPath.row]
        let title = movie["title"] as! String
        let overview = movie["overview"] as! String

        cell.titleLabel.text = title
    cell.overviewLabel.text = overview

Однако это приводит к двум ошибкам в строке;

return NSDictionary.lowercased().contains(searchText.lowercased())

Значение типа 'Любой' не имеет члена 'содержит'

Значение типа 'NSDictionary 'нет члена' в нижнем регистре '

я должен возвращать что-то отличное от NSDictionary?

1 Ответ

0 голосов
/ 18 апреля 2020

Предполагая, что вы ищете подходящие названия, вы хотели бы сделать это:

newMovies = newMovies.filter({ movie in
    guard let title = movie["title"] as? String else { return false }
    return title.lowercased().contains(searchText.lowercased())
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...