@FlooDwm

Не знаю даже как описать вопрос! Но суть сортировка массива или замена на не массив???

суть такова есть массив названия постов, и есть массив айдишников этих постов и они совпадают по количеству и номеру в массиве.
Когда человек нажимает на cell он переходит на пост. НО!!!! Реализован поиск по словам который фильтрует массив названий постов, но во время фильтрования массив айдишников перестает совпадать с массивом отфильтрованных названий постов.
КАК их фильтровать одновременно или может использовать не массив а словарь. Короче я даже не знаю че делать. Направьте!!!
class TableViewController: UITableViewController, UISearchResultsUpdating {
    
    var searchController : UISearchController!
    var resultController = UITableViewController()
    var arFiltLet = [String]()
    
    var arWords = [String]()
    var arID = [String]()
    
    func downloadData(){
        let uri = "http://urlurlurl"
        let url = NSURL(string: uri);
        let request = NSMutableURLRequest(url: url as! URL)
        
        let task = URLSession.shared.dataTask(with: request as URLRequest) { data,response,error in
            guard error == nil && data != nil else {
                print("Error:",error)
                return
            }
            
            let httpStatus = response as? HTTPURLResponse
            
            if httpStatus!.statusCode == 200 {
                if data?.count != 0 {
                    let responseString = try! JSONSerialization.jsonObject(with: data!, options: .allowFragments) as! NSDictionary
                    
                    
                    if let posts = responseString["list"] as? [AnyObject]{
                        for post in posts{
                                self.arWords.append(post["NAME"] as! String)
                                self.arID.append(post["ID"] as! String)
                        }
                    }
                    else {
                        print("I could not find list array")
                    }
                    
                    DispatchQueue.main.sync {
                        self.tableView.reloadData()
                    }
                }
                else{
                    print("No data got from url!")
                }
            }
            else{
                print("error httpstatus code is :",httpStatus!.statusCode)
            }
        }
        task.resume()
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        self.downloadData()

        self.searchController = UISearchController(searchResultsController: self.resultController)
        self.tableView.tableHeaderView = self.searchController.searchBar
        self.searchController.searchResultsUpdater = self
        self.resultController.tableView.dataSource = self
        self.resultController.tableView.delegate = self
        definesPresentationContext = true
    }
    
    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }
    func updateSearchResults(for searchController: UISearchController) {
       self.arFiltLet = self.arWords.filter{(lett : String) -> Bool in
        if lett.lowercased().contains(self.searchController.searchBar.text!.lowercased()){
            return true
        }else{
            return false
        }
      }
        self.resultController.tableView.reloadData()
    }

    override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        if tableView == self.tableView {
            return self.arWords.count
        }else{
            return self.arFiltLet.count
        }
    }
    
    override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
         let cell = self.tableView.dequeueReusableCell(withIdentifier: "Cell", for: indexPath)
        if tableView == self.tableView{
            cell.textLabel?.text = self.arWords[indexPath.row]
        }else{
            cell.textLabel?.text = self.arFiltLet[indexPath.row]
        }
        return cell
    }
    
    override func prepare(for segue: UIStoryboardSegue, sender: Any?) {

        if segue.identifier == "segueTableToalpavitTable" && searchController.isActive {
            if let indexPath = self.resultController.tableView.indexPathForSelectedRow {
                             let destanation = segue.destination as! DetailViewController
                print(indexPath.row)
                destanation.idPost = arID[(indexPath.row)]
            } else if let indexPath = self.tableView.indexPathForSelectedRow {
                let destanation = segue.destination as! DetailViewController
                destanation.idPost = arID[(indexPath.row)]
            }
        }
        if segue.identifier == "segueTableToalpavitTable" {
            if let indexPath = self.tableView.indexPathForSelectedRow {
                let destanation = segue.destination as! DetailViewController
                destanation.idPost = arID[(indexPath.row)]
            }
        }
    }
}
  • Вопрос задан
  • 257 просмотров
Решения вопроса 1
@FlooDwm Автор вопроса
Кароче реализовал словари
self.dictWordId.updateValue(post["ID"] as! String, forKey: post["NAME"] as! String)
и в segue добавил такое
destanation.idPost = dictWordId[arFiltLet[(indexPath.row)]]!
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы