在Swift中过滤NSArray的词典

时间:2015-11-27 17:47:54

标签: ios json swift

我有一个从RESTful API中提取的字典数组。我目前正在尝试根据需要过滤掉“域名”等于“youtube.com”的数据。

如何过滤掉这个?我已经调查了

results.filter({
    $0["domain"] != "youtube.com"

但不确定如何更深入地让它发挥作用。

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

或者,您可以使用Swift数组,将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()}

答案 1 :(得分:0)

使用

func filteredArrayUsingPredicate(_ predicate: NSPredicate) -> [AnyObject]

过滤NSArray实例。