2016-02-27 71 views
-2

局勢: 我有一個通過SwiftyJSON解析的JSON響應。我正在用數據填充表格單元格。一切都很酷,但現在我需要從我的JSON中刪除一些字典,並且它不會讓我以任何方式(循環或其他條件)來執行此操作。收到JSON的如何過濾XCODE中的JSON響應?

例子:

{"post-comments" : [ 
       { 
       "post" : "new", 
       "_id" : "1", 
       }, 
       { 
       "post" : "new", 
       "_id" : "2", 
       }, 
       { 
       "post" : "post with title", 
       "_id" : "23", 
       }, 
       { 
       "post" : "new", 
       "_id" : "29", 
       }, 
       { 
       "post" : "post with title", 
       "_id" : "90", 
       }, 
       { 
       "post" : "post with title", 
       "_id" : "33", 
       } 
      ] 

}

我試着擺脫一些詞典,可以說如果「後」 ===「新」 - 我需要將它們刪除從我的JSON,並繼續填充左數據我的單元格。

完全卡住..任何想法將不勝感激。

下面是完整的tableviewcontroller:

 class TableViewContr: UITableViewController { 

     let Comments : String = "http://localhost:3000/api/comments/" 

     var json : JSON = JSON.null 

     override func viewDidLoad() { 
      super.viewDidLoad() 

      getPostComments(Comments) 

     } 

     func getPostComments(getcomments : String) { 

      Alamofire.request(.GET, getcomments).responseJSON { 
       response in 

       guard let data = response.result.value else { 
        return 
       } 

       self.json = JSON(data) 

       self.tableView.reloadData() 

      } 

     } 

     override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 

      switch self.json["post-comments"].type { 

      case Type.Array: 
       return self.json["post-comments"].count 

      default: 
       return 1 

      } 
     } 

     func populateFields(cell: TableViewContrCell, index: Int) { 

      guard let comment = self.json["post-comments"][index]["post"].string else { 
       return 
      } 
      cell.commentContent!.text = comment 

     } 

     override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
      let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableViewContrCell 

      populateFields(cell, index: indexPath.row) 

      return cell 
     } 


    } 
+0

如何ř填充細胞PLZ添加一些代碼數據源陣列。 – Nishant

+0

將JSON字典解析爲自定義對象(類/結構)。不要傳遞字典。字典是低層次的,並且與它們一起工作很困難並且代碼是不可讀的。 – Sulthan

+0

@Nishant更新 –

回答

0

這是解析和重裝表視圖之前篩選JSON數據的方法。

comments是包含post-comments字典

class TableViewContr: UITableViewController { 

    let commentURL : String = "http://localhost:3000/api/comments/" 

    var comments = [[String:String]]() 

    override func viewDidLoad() { 
    super.viewDidLoad() 
    getPostComments(commentURL) 
    } 

    func getPostComments(getcomments : String) { 

    Alamofire.request(.GET, getcomments).responseJSON { 
     response in 

     guard let data = response.result.value else { return } 

     let jsonData = JSON(data) 
     let postComments = jsonData["post-comments"].arrayObject as! [[String:String]] 
     self.comments = postComments.filter{$0["post"] != "new"} 
     dispatch_async(dispatch_get_main_queue()) { 
     self.tableView.reloadData() 
     } 
    } 
    } 

    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
    return comments.count 
    } 

    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 
    let cell = tableView.dequeueReusableCellWithIdentifier("cell", forIndexPath: indexPath) as! TableViewContrCell 

    let comment = comments[indexPath.row] 
    cell.commentContent!.text = comment["post"]! 

    return cell 
    } 
} 
+0

哇,你是超級巨星,當JSON具有相同的模式時,代碼實際上工作。我很愚蠢,因爲我創建樣本JSON時做了一個括號錯誤:(糾正它 –

+0

,所以它基本上崩潰: 讓postComments = jsonData [「後評論」]。arrayObject!as![[String:String ]] 說:fatal error:數組無法從Objective-C橋接 –

+0

我不使用Alamofire,所以我不知道返回的是什麼類型的數據類型,'arrayObject'後面的感嘆號是多餘的,強制沮喪地解開陣列,不是每種類型都應該有一個尾隨的感嘆號/問號。 – vadian