如何使用 AlamoFire 搜索 JSON API 和解码数组
Posted
技术标签:
【中文标题】如何使用 AlamoFire 搜索 JSON API 和解码数组【英文标题】:How to search a JSON API and decode an array using AlamoFire 【发布时间】:2018-05-11 18:51:31 【问题描述】:我正在搜索一个 JSON API,我需要解码其中的一个数组。我正在使用 AlamoFire。示例:当我输入字母“F”时,我只想显示“F”字样。我只想在数组“名称”中搜索。对此的任何帮助将不胜感激!
下面是我的代码:
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String)
let url = "http://dummy.com/url"
Alamofire.request(url).responseData (dataResponse) in
if let err = dataResponse.error
print("Failed to contact", err)
return
guard let data = dataResponse.data else return
let dummyString = String(data: data, encoding: .utf8)
print(dummyString ?? "")
do
let searchResult = try JSONDecoder().decode(SearchResults.self, from: data)
print("Result Count:", searchResult.id)
catch let decodeError
print("Failed to decode:", decodeError)
struct SearchResults: Decodable
let id: String
我的 API 数组如下所示:
结果ID:“1”, 名称:“食物”, , 结果ID:“2”, 名称:“电影”,
【问题讨论】:
你得到的实际反应是什么? 【参考方案1】:你的结果是在array
format
所以你需要把你的model
像这样:
let searchResult = try JSONDecoder().decode([SearchResults].self, from: data)
对于搜索,您可以应用过滤器:
let filteredArray = searchResult.filter( $0.name.contains("f") )
【讨论】:
谢谢!我们可以去聊天讨论更多吗? 是的,我们可以去 我们怎么去聊天 我觉得***上有聊天 你也可以在这里问【参考方案2】:正如你所说,你的回应是:
[
resultId: "1", name: "Food" ,
resultId: "2", name: "Movies"
]
所以,你的结构是,
struct SearchResults: Decodable
let resultId: String
let name: String
你将把它用作:
do
let resultArray = try JSONDecoder().decode([SearchResults].self, from: data)
print("Result Count:", searchResult.id)
catch let decodeError
print("Failed to decode:", decodeError)
对于搜索,您应该使用filter
,如:
let searchString = "F"
let filteredArray = resultArray.filter( String($0.name.first!) == searchString )
用于匹配第一个字符 = String($0.name.first!) == searchText
检查名称是否有搜索文本 = $0.name.contains(searchText)
总计:
do
let searchResult = try JSONDecoder().decode([SearchResults].self, from: data)
let filteredArray = resultArray.filter( $0.name.contains(searchText) )
catch let decodeError
print("Failed to decode:", decodeError)
【讨论】:
谢谢。我想按我在键盘上单击的任何字母进行搜索。我怎样才能做到这一点?我以“F”为例 我们可以去聊天讨论这个吗?以上是关于如何使用 AlamoFire 搜索 JSON API 和解码数组的主要内容,如果未能解决你的问题,请参考以下文章
Swift 搜索栏 - 使用 Alamofire 请求更新表格视图
Alamofire Swift HTTPPost 登录和 JSON 响应