iOS数据过滤错误
Posted
技术标签:
【中文标题】iOS数据过滤错误【英文标题】:iOS data filtering error 【发布时间】:2015-11-16 16:49:45 【问题描述】:我在下面有一些代码。我有一个来自 SwiftyJSON 的 JSON 对象,我想过滤它。 所以很自然地,我想:让我们过滤它并用过滤后的数据实例化一个新数组。
import UIKit
import SwiftyJSON
import Alamofire
class SchoolSelectViewController: UITableViewController, UISearchResultsUpdating, UISearchBarDelegate
let url = "https://mijn.magister.net/api/schools?filter=%%%".stringByAddingPercentEncodingWithAllowedCharacters(NSCharacterSet.URLQueryAllowedCharacterSet())
var json: JSON = []
var filteredJson: JSON = []
var resultSearchController = UISearchController()
override func viewDidLoad()
super.viewDidLoad()
Alamofire.request(.GET, self.url!).validate().responseJSON
response in
switch response.result
case .Success:
if let value = response.result.value
self.json = JSON(value)
self.resultSearchController = UISearchController(searchResultsController: nil)
self.resultSearchController.searchResultsUpdater = self
self.resultSearchController.searchBar.delegate = self
self.resultSearchController.searchBar.sizeToFit()
self.tableView.tableHeaderView = self.resultSearchController.searchBar
self.definesPresentationContext = true
self.tableView.reloadData()
break
case .Failure: break
self.navigationController?.navigationBarHidden = true
override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell
print("Called tableView cellForRowAtIndexPath")
let cell = tableView.dequeueReusableCellWithIdentifier("schoolSelectCell")! as UITableViewCell
let cellTitle = json[indexPath.row]["Name"]
let cellDetailTitle = json[indexPath.row]["Url"]
cell.accessoryType = UITableViewCellAccessoryType.DisclosureIndicator
cell.textLabel?.text = cellTitle.string
cell.detailTextLabel?.text = cellDetailTitle.string
return cell
override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int
if (self.resultSearchController.active)
return self.filteredJson.count
else
return self.json.count
override func didReceiveMemoryWarning()
super.didReceiveMemoryWarning()
func updateSearchResultsForSearchController(searchController: UISearchController)
let searchString = self.resultSearchController.searchBar.text
func filterContentForTextSearch(searchText: String)
self.filteredJson = self.json[0]["Name"].arrayValue.filter(
(school: JSON) -> Bool in
)
但我最终收到此错误:Cannot convert value of type 'JSON -> Bool' to expected argument type '(Element) -> Bool'
我将如何解决这个问题?
【问题讨论】:
什么是self.json
?显示它的声明,以便我们知道它是什么类型。
编辑问题以提供更多信息。
找到原因了吗?我想知道它在哪里。
【参考方案1】:
你应该过滤一个数组。
使用以下内容:
self.filteredJson = self.json.arrayValue.filter(
(school: JSON) -> Bool in
// Do something.
)
如果上面的代码不起作用,那么检查JSON
的类型。
【讨论】:
Cannot invoke 'filter' with an argument list of type '(@noescape (JSON) throws -> Bool)'
现在收到此错误..
@jbehrens94,我刚刚使用以下代码进行了快速测试:let json: JSON = ["a", "b", "c"] print(json.arrayValue.filter( (letter: JSON) -> Bool in return letter.stringValue > "a" ))
它有效,所以我认为问题不在于语法。
不过,这一点是正确的。 filter
适用于数组。 JSON
对象本身并不是一个数组——但它可能由一个数组支持。你需要那个数组。
那么我该如何解决这个问题呢?我现在很迷茫如何解决我的错误。
我没有在您的代码中看到arrayValue
方法。而最重要的部分是空的。以上是关于iOS数据过滤错误的主要内容,如果未能解决你的问题,请参考以下文章