在Swift中过滤字典的NSArray
我有一个从RESTful API中提取的字典数组。 我目前正试图根据需要过滤掉“域”等于“youtube.com”的数据。
我如何过滤掉? 我看过
results.filter({ $0["domain"] != "youtube.com"
但不知道如何去更深入的工作。
或者,您可以使用Swift数组,将theJSON
强制theJSON
为[[String: AnyObject]]
而不是NSMutableArray
。 然后,你不必投射results
。 然后你可以使用filter
。
在Swift 1.2中,这可能是:
let task = session.dataTaskWithURL(url) { data, response, error in if error != nil || data == nil { print(error) return } var parseError: NSError? if let resultObject = NSJSONSerialization.JSONObjectWithData(data, options: NSJSONReadingOptions(rawValue: 0), error: &parseError) as? [[String: AnyObject]] { let results = resultObject.filter() { ($0["data"]?["domain"] as? String) != "youtube.com" } dispatch_async(dispatch_get_main_queue()) { // use results here } } else { print(parseError) return } } task.resume()
或者,在Swift 2:
let task = session.dataTaskWithURL(url) { data, response, error in guard data != nil && error == nil else { print(error) return } do { let resultObject = try NSJSONSerialization.JSONObjectWithData(data!, options: []) as? [[String: AnyObject]] let results = resultObject?.filter() { ($0["data"]?["domain"] as? String) != "youtube.com" } dispatch_async(dispatch_get_main_queue()) { // use results here } } catch let parseError { print(parseError) } } task.resume()}
使用
func filteredArrayUsingPredicate(_ predicate: NSPredicate) -> [AnyObject]
过滤一个NSArray实例。