Filtrando listas com search controller — Swift

Um recurso muito legal no iOS é a possibilidade de filtrar listas. Isso pode facilitar, e muito, nossas vidas, principalmente quando estamos lidando com listas muito grandes, como por exemplo a lista de "Ajustes" do próprio iPhone. Hoje eu irei compartilhar com vocês como fazer essa filtragem, utilizando uma search controller.

Importante: aqui estou usando um pequeno projeto que possui uma base de dados de países e seus respectivos continentes. Assim, essa base de dados está sendo referenciada na minha MainViewController através de uma constante lá na parte de cima: let countries = Country.getAllCountries() que me retorna um vetor cheio de structs country. Além disso, eu criei uma variável para armazenar os resultados filtrados a serem exibidos: var filteredResults = [Country](). Dito isso, vamos aos trabalhos.

Passo 1: precisamos criar uma search controller. Abaixo temos a criação comentada linha por linha. A linha em que setamos o delegate dará erro, por enquanto, futuramente iremos implementá-lo.

Passo 2: criar funções responsáveis por filtragem. Abaixo, temos todas as funções necessárias comentadas e documentadas.

Passo 3: configurar os delegates da search bar (digitação e mudança de escopo) e os da table view (total de linhas e conteúdo da célula). Abaixo, novamente, temos todas as funções necessárias comentadas e documentadas.

E nosso projeto está finalizado, com a filtragem funcionando perfeitamente:

Caso queira ver o projeto completo, segue abaixo o link do meu GitHub com ele implementado. Qualquer dúvida ou dica é só chamar!

Documentação referente:

--

--

Fabrício Guilhermo
Apple Developer Academy | Mackenzie

Cientista da computação, desenvolvedor iOS e apaixonado por novas tendências tecnológicas.