Чтобы иметь лучший / более чистый код, возможно, вы хотите разделить ваш вызов API в функции (возможно, func makeRequest()
или что-то), чтобы вызывать только эту функцию в вашем viewDidLoad.
Youиметь
var weatherList: [weatherJSON] = []
Это список с объектами weatherJSON, которые вы хотите, чтобы таблица показывала, но проблема в вашем запросе, когда вы перезагружаете данные в таблице, но не сохраняете свой ответ JSONв вашем weatherList
.Сначала вы должны сохранить ответ JSON в вашей переменной weatherList
или добавить результаты в этот массив.Сделав это, вы сможете заполнить свою таблицу, когда: cell.nameLabel?.text = weatherList[indexPath.row]
Также вам необходимо добавить свойство объекта Weatherlist, который вы хотите показать.что-то вроде weatherList[indexPath.row].name
или имя свойства, которым обладает объект.
Кроме того, я рекомендую использовать некоторую библиотеку для выполнения HTTP-запросов, таких как AlamoFire и SwiftyJson, для сопоставления вашего ответа JSON с вашим объектом.
Используя библиотеки, которые я упомянул, все ваши вызовы API и табличные функции могут быть такими: func getWeather () {
let url: String = "http://example.com/api/weather/"
AFWrapper.requestGETURL(url, success: {
(JSONResponse) -> Void in
for item in JSONResponse{
let weatherList = [WeatherList(fromJson: item.1)]
for weather in weatherList {
self. weatherList.append(weather)
}
}
self.tableView.reloadData()
})
{
(error) -> Void in
print("Error \(error)")
}
}
А в вашей таблице func:
cell.nameLabel.text = self.weatherList[indexPath.row].name
Это можетбыть достигнуто с помощью класса AlamoFireWrapper, чтобы сделать сообщение и запрос на получение, подобный этому: AlamoFireWrapper.swift
import UIKit
import Alamofire
import SwiftyJSON
class AFWrapper: NSObject {
class func requestGETURL(_ strURL: String, success:@escaping (JSON) -> Void, failure:@escaping (Error) -> Void) {
Alamofire.request(strURL).responseJSON { (responseObject) -> Void in
if responseObject.result.isSuccess {
let resJson = JSON(responseObject.result.value!)
success(resJson)
}
if responseObject.result.isFailure {
let error : Error = responseObject.result.error!
failure(error)
}
}
}
class func requestPOSTURL(_ strURL : String, params : [String : AnyObject]?, headers : [String : String]?, success:@escaping (JSON) -> Void, failure:@escaping (Error) -> Void){
Alamofire.request(strURL, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers).responseJSON { (responseObject) -> Void in
if responseObject.result.isSuccess {
let resJson = JSON(responseObject.result.value!)
success(resJson)
}
if responseObject.result.isFailure {
let error : Error = responseObject.result.error!
failure(error)
}
}
}
}