Я создаю панель поиска, используя viewController, в viewController есть ячейка таблицы с двумя метками с названием: countryName и number. Я также добавил uisearchbar в viewController.
в этой задаче я могу искать только номера не для countryName,
как мне искать номера и названия стран?
вот мой код:
Модель
import Foundation
import UIKit
struct ModelData {
var countryName: String
var numbers: String
}
DataTableViewCell
class DataTableViewCell: UITableViewCell {
@IBOutlet weak var numbers: UILabel!
@IBOutlet weak var countryName: UILabel!
}
ViewController
import UIKit
import Alamofire
import SwiftyJSON
class ViewController: UIViewController{
@IBOutlet weak var tableView: UITableView!
@IBOutlet weak var countrySearch: UISearchBar!
var searchedCountry = [ModelData]()
var searching = false
var dataJson = [modelData]()
override func viewDidLoad() {
super.viewDidLoad()
countrySearch.delegate = self
fetchData()
}
func numberOfSections(in tableView: UITableView) -> Int {
return 1
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if searching{
return searchedCountry.count
} else{
return dataJson.count
}
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier:"DataTableViewCell", for: indexPath) as! DataTableViewCell
if searching {
cell?.numbers.text = searchedCountry[indexPath.row]
cell?.countryName.text = searchedCountry[indexPath.row]
} else {
cell?.numbers.text = dataJson[indexPath.row]
cell?.countryName.text = dataJson[indexPath.row]
}
return cell
}
}
Позвоните JSON с URL:
func fetchData(){
DispatchQueue.main.async {
let url = ""
Alamofire.request(url, method: .get, encoding: URLEncoding.default).responseJSON{
(response) in
switch response.result{
case .success(let value):
let json = JSON(value)
if let data = json["data"].array{
for item in data{
self.tableView.reloadData()
let numbers = item["numbers"].stringValue
let countryName = item["countryName"].string
let data = ModelData(countryName: countryName, numbers: numbers)
self.dataJson.append(data)
}
}
case .failure(let error):
print(error)
}
}
}
}
Вот расширение viewController:
extension ViewController: UISearchBarDelegate{
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
searchedCountry = dataJson.filter({$0.numbers.lowercased().prefix(searchText.count) == searchText.lowercased()})
searchedCountry = dataJson.filter({$0.countryName.lowercased().prefix(searchText.count) == searchText.lowercased()})
searching = true
self.tableView.reloadData()
}
}