Я новичок в swift и пытаюсь получить json из api и показать его UITableView, но он не отображается.
Это json:
{
"success": true,
"user_id": "somestringhere",
"devices": [
{
"id": "somestringhere",
"source": "somestringhere",
"source_text": "somestringhere",
"logo_url": "somestringhere",
"is_connected": "0"
},
{
Для сопоставления данных json:
import Foundation
import ObjectMapper
class Devices: Mappable {
required init?(map: Map) {
}
func mapping(map: Map) {
id<-map["id"]
source<-map["source"]
sourceText<-map["source_text"]
logo<-map["logo_url"]
isConnected<-map["is_connected"]
}
var id : String?
var source : String?
var sourceText : String?
var logo : String?
var isConnected : Bool?
}
Мой контроллер:
import Foundation
import UIKit
import SwiftyJSON
import Alamofire
import ObjectMapper
class HomeViewController: UIViewController, UITableViewDelegate, UITableViewDataSource {
var devices : [Devices]?
override func viewDidLoad() {
super.viewDidLoad()
tableView.register(HomeTableViewCell.nib(), forCellReuseIdentifier: HomeTableViewCell.identifier)
tableView.delegate = self
tableView.dataSource = self
loadData()
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return devices?.count ?? 0
}
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCell(withIdentifier: HomeTableViewCell.identifier, for: indexPath) as! HomeTableViewCell
cell.setup(title: "\(devices?[indexPath.row].sourceText)", iconLink: "\(devices?[indexPath.row].logo)")
return cell
}
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
return 120
}
func loadData(){
let base = Config().base
let endPoint = Config.EndPoint()
let patientId = User().id
let url = base + endPoint.showDevices
let header: HTTPHeaders = [
"Content-Type": "application/json",
]
let params: Parameters = [
"patient_id" : patientId
]
let code = Code(id: id)
AF.request(url, method: .get, parameters: params, encoding: URLEncoding.default, headers:header).validate()
.response{ (response) in
switch response.result {
case .success(let value):
let json = JSON(value)
self.devices = Mapper<Devices>().mapArray(JSONString: json.rawString()!)
self.tableView.reloadData()
case .failure(let error):
print(error)
}
}
}
}
Я попытался распечатать переменную устройства после
self.devices = Mapper<PatientDevices>().mapArray(JSONString: json.rawString()!)
print(self.devices)
и показывает мне
Optional([ProjectName.Devices])
Я попытался распечатать данные ответа json и запрос был успешным, но не смог добавить его в tableview. Что мне делать, чтобы решить эту проблему? Не знаю, что делаю не так.