Swift:使用在JSON文件中具有特定值的数据填充TableView

时间:2016-10-27 01:38:19

标签: json swift uitableview

我知道如何使用基于特定键的JSON数据填充表视图,但我试图弄清楚如果数据在键值中具有特定值,如何仅将数据放入表视图中对

具体来说,我的JSON文件包含一个键值对,它是: “location”:“芝加哥,IL”, “大陆”:“美国”

我希望我的表视图显示任何具有“US”大陆值的条目的位置,并且我不希望它显示任何与其关联的大陆不同的位置。

我能得到的任何帮助将不胜感激。这是我在parseJSON文件中的内容,但它目前无法完成我想做的事情。我在tableview函数

中得到一个超出范围的数组索引
    func parseJSON(){
    do{
        let data = NSData(contentsOfURL: NSURL(string: "https://jsonblob.com/api/jsonBlob/580d0ccce4b0bcac9f837fbe")!)

        let jsonResult = try NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableContainers)

        for anItem in jsonResult as! [Dictionary<String, AnyObject>]{

            let mifiContinent = anItem["continent"] as! String!
            if var mifiContinent = jsonResult["US"]{
                let mifiLocation = anItem["location"] as! String
                let newLocation = Location(location: mifiLocation)
                locationOfMifi.append(newLocation)
            }
        }
    }
    catch let error as NSError{
        print(error.debugDescription)
    }
}

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {

    if let cell = tableView.dequeueReusableCellWithIdentifier("LocationCell", forIndexPath: indexPath)as? LocationCell{

        let location: Location!

        location = locationOfMifi[indexPath.row]
        cell.configureCell(location)
        return cell

    } else{
        return UITableViewCell()
    }

}

2 个答案:

答案 0 :(得分:0)

只需更改过滤

collections

答案 1 :(得分:0)

您还可以尝试一些快速语法来帮助您完成所做的事情。您必须稍微修改配置您的单元格。

struct Location {
    var location: String?
    var continent: String?

    init(_ jsonResult: [String : AnyObject]) {
      self.location = jsonResult["location"] as? String
      self.continent = jsonResult["continent"] as? String
    }
}

//defined in your class
var locationOfMifi = [Location]()

//where parsing your json result
if let jsonResult = jsonResult as? [[String : AnyObject]] {
    locationOfMifi = jsonResult.map({ Location($0) }).filter({ $0.continent == "US" })
}

//your tableview datasource
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return locationOfMifi.count
}