【问题标题】:How to load JSON data into cells using Alamofire/SwiftyJSON?如何使用 Alamofire/SwiftyJSON 将 JSON 数据加载到单元格中?
【发布时间】:2019-05-22 13:47:12
【问题描述】:

我有一个指向this JSON 的链接,我需要用其中的数据填充单元格。它基本上是一个问答数组。

我在互联网上尝试了几种解决方案,但似乎没有一个适合我的需要。

这是我收集的一些代码,但我认为它对我没有好处。

var preguntas = [String]()

func getPreguntas(url: String, parameters:[String:String]) {
        Alamofire.request(url, method: .get, parameters: parameters).responseJSON { response in

            if response.result.isSuccess {
                print("Success!")
                let preguntasJSON: JSON = JSON(response.result.description)
            } else {
                print("Error \(String(describing: response.result.error))")
            }
            self.tableView.reloadData()
        }
    }

func updatePreguntas(json: JSON) {
    for (pregunta, respuesta) in json["faqs"] {
        let preg = ("\(pregunta) \(respuesta)")

            preguntas.append(preg)
        }
    }

override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCell(withIdentifier: FAQTableViewCell.reuseIdentifier, for: indexPath)

        if let cell = cell as? FAQTableViewCell {
            // TODO
            cell.preguntaLabel.text = preguntas[indexPath.row]
//            cell.respuestaLabel.text = respuestas[indexPath.row]
        }

        return cell
    }

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

我需要将preguntas 作为单元格的标题,然后在展开单元格时点击下方显示respuestas。但我已经覆盖了扩展部分。但我无法从 JSON 中得到这两件事。

【问题讨论】:

    标签: ios json swift alamofire


    【解决方案1】:

    使用Codable

    var preguntas = [String]()
    
    
    Alamofire.request(URL(string:"https://test-tokbox-assistcard.herokuapp.com/faqs")!, method: .get, parameters: [:], encoding: URLEncoding.default, headers: [:]).responseData { response in
    
    
        if response.result.isSuccess {
    
            guard let data = response.data else { return }
    
            do {
    
             let res = try JSONDecoder().decode(Empty.self, from: data)
             print(res.faqs)
             preguntas = res.fags.map { $0.pregunta }
            }
            catch {
    
                print(error)
            }
        }
        self.tableView.reloadData()
    }
    

    // MARK: - Empty
    struct Empty: Codable {
        let faqs: [FAQ]
    }
    
    // MARK: - FAQ
    struct FAQ: Codable {
        let pregunta, respuesta: String
    }
    

    【讨论】:

    • 我收到了error: (DecodingError) dataCorrupted
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 2019-10-22
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2018-09-01
    相关资源
    最近更新 更多