如何在swift中的tableview单元格中显示Api响应

时间:2017-09-26 09:46:43

标签: ios swift uitableview alamofire

我被困在我的代码中,我正在尝试显示API响应tableview单元格,但我不知道如何填充数组中的数据,所以没有在我的tableviewcell中显示任何内容。我正在迅速使用custome cell和Alamofire。请改进我的错误给我解决方案。

func Api_call()
{
    let url = URL(string: "https://dousic.com/api/radiolist")!
    let components = URLComponents(url: url, resolvingAgainstBaseURL: true)!
    // let fragment = components.fragment!
    print(components)

    let params = ["user_id":"16"  ]

    Alamofire.request(url, method: .post, parameters: params, encoding: URLEncoding.default).responseJSON {response in
         self.hideActivityIndicator()
        var err:Error?
        switch response.result {
        case .success(let value):
            print(value)


            let json = JSON(value)

            // returns nil if it's not an array
            if let resData = json["radioList"].arrayObject
            {
                self.array_RadioList = resData as! [[String:AnyObject]]
            }
              if self.array_RadioList.count > 0 {
                    self.tbl_home.reloadData()
                }

        case .failure(let error):
            err = error
            print(err ?? "error .....")
        }
    }

}`

感谢您的帮助。

修改

enter image description here

4 个答案:

答案 0 :(得分:1)

Just create a radio list variable like this 

    var array_RadioList:[JSON]?

Get array from json like this    
-
    if let resData = json["response"]["radioList"].array {
                    self.array_RadioList = resData
                    self.tableView.reloadData()
                }
and reload data.And get radio object in 

    func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell: UITableViewCell? = self.tableView.dequeueReusableCell(withIdentifier: cellReuseIdentifier)
        let radio:JSON? = array_RadioList?[indexPath.row]
        cell?.textLabel?.text = radio?["radio_tags"].string
        return cell ?? UITableViewCell()
    }

答案 1 :(得分:0)

如果您正在调用的API制作精良,则应使用get方法,而不是帖子。 此外,我尝试使用“https://dousic.com/api/radiolist?user_id=16”,但它返回

{
    "response": {
        "code": "301",
        "error": "wrong url"
    }
}

这两件事可能是你的问题,或者它可能在你的自定义单元格中,或者在你的cellforrow方法中...... 如果您可以显示更多代码,那将有所帮助。

修改

尝试使用此版本的可选链接:

if let resData = json["radioList"].arrayObject as? [[String:AnyObject] {
    self.array_RadioList = resData
    self.tbl_home.reloadData()
}

并尝试使用断点对其进行调试,以查看应用程序是否到达您想要的任何位置以及此时您的变量是什么。

答案 2 :(得分:0)

如果从Api_call()获取array_RadioList,请尝试使用

func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell : homeCell = tableView.dequeueReusableCell(withIdentifier: "homeCell")! as! homeCell cell.lbl_name?.text = array_RadioList[indexPath.row]["radio_title"] as? String return cell }

并检查numberOfRowsInSection函数。

答案 3 :(得分:0)

试试这个

  func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return [self.array_RadioList].count;
}