Возникли проблемы при написании правильного поиска для части фильтра UISearchController - PullRequest
0 голосов
/ 13 мая 2018

Итак, вот моя модель данных, которую я смог найти без UISearchController, однако

import Foundation
import UIKit

struct events {
    var eventnumber:Int
    var eventname:String
    var swimmers:[heatlane]?
    var expanded:Bool
}

struct heatlane{
    var heat:Int
    var lane:Int
    var age:Int
    var swimmer:String
    var team:String
    var seedTime:String
    var finalsTime:String
}

Выше приведена структура данных. Я пытаюсь найти правильный фильтр, чтобы при вводе он заполнял только массив, содержащий часть имен пловцов. Кроме того, я не уверен, как бороться с четкой строкой поиска. Когда я нажимаю на

func filterContentForSearchText(_ searchText: String, scope: String = "All") {
        print(searchText.lowercased())
 if(searchBarIsEmpty()){
        print("empty search")
        print(self.arrayEV)
        self.filarrayEV = self.arrayEV
        self.eventtable.reloadData()
    }else{
            self.filarrayEV = self.arrayEV.filter({( eachevent : events) -> Bool in
                return (eachevent.swimmers?.contains(where: {$0.swimmer.lowercased().contains(searchText.lowercased())}))!
            })
        self.eventtable.reloadData()
}
    }

1 Ответ

0 голосов
/ 13 мая 2018

Фильтр событий :

фильтр включен swimmer Строка с hasPrefix, contains

 let sequence = searchText.enumerated().map{String(searchText.dropLast($0.offset))}

 self.filarrayEV =  self.arrayEV.filter { (event) -> Bool in

                      let allResult = sequence.reduce([heatlane]()) { (result, value) -> [heatlane] in
                        let filter = event.swimmers?.filter({ (item) -> Bool in
                            return item.swimmer.lowercased().hasPrefix(value.lowercased()) ? true : item.swimmer.lowercased().contains(value.lowercased())
                        })
                           return result + (filter ?? [])
                      }
                 return allResult.isEmpty == false
             }

   self.eventtable.reloadData()

Очистить поиск Вы можете использовать UISearchBarDelegate

class MyViewController: UIViewController, UISearchBarDelegate {

    func searchBarTextDidBeginEditing(_searchBar: UISearchBar) {
        searchBar.setShowsCancelButton(true, animated: true)
        //write other necessary statements
    }

    func searchBarCancelButtonClicked(_searchBar: UISearchBar) {
        searchBar.text = nil
        searchBar.setShowsCancelButton(false, animated: true)

        // Remove focus from the search bar.
        searchBar.endEditing(true) 
    }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...