如何在快速的iOS应用程序中使用JSON解码器实现UISearchBar来过滤名称或大写JSON

问题描述 投票:0回答:1

如何在快速的iOS应用程序中使用JSON Decoder实现UISearchBar来过滤名称或大写JSON。我想实现UISearchBar并使用JSON数据中的名称来搜索结果或过滤结果。

  import UIKit

结构创建

  struct jsonstruct:Decodable
  {
  let name:String   
   let capital:String
  }

  class ViewController: UIViewController,UITableViewDataSource,UITableViewDelegate, UISearchBarDelegate, UISearchControllerDelegate, UISearchDisplayDelegate {

为TableView和SearchBar创建插座

   @IBOutlet var tableview: UITableView!

   @IBOutlet var searchBar: UISearchBar!

声明JSON

   var arrdata = [jsonstruct]()

获取数据的功能

func getdata()
{
let url = URL(string: "https://restcountries.eu/rest/v2/all")

URLSession.shared.dataTask(with: url!)
{
(data, response, error) in

do
{
if error == nil
{
self.arrdata = try
JSONDecoder().decode([jsonstruct].self, from: data!)

for mainarr in self.arrdata
{
print(mainarr.name,":",mainarr.capital as Any)
DispatchQueue.main.async 
{
self.tableview.reloadData()
}
}
}
}
catch
{
print(error.localizedDescription)
}
}.resume()
}

TABLE VIEW

func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
{
return self.arrdata.count
}

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

let cell:TableViewCell = tableView.dequeueReusableCell(withIdentifier: "cell") as! TableViewCell
cell.label1.text = "Name: \(arrdata[indexPath.row].name)"
cell.label2.text = "Capital: \(arrdata[indexPath.row].capital)"
return cell
}

超越功能

override func viewDidLoad() 
{
getdata()
}
ios json swift uisearchbar searchbar
1个回答
0
投票

使用下面的didBegin的IBAction创建TextField,并创建一个数组,可以在其中过滤数据。

@IBAction func tfSearch(_ sender: UITextField) {
    let filteredArray = yourArr.filter { $0.contains(sender.text) }
}
© www.soinside.com 2019 - 2024. All rights reserved.