В настоящее время я учусь подключаться к базе данных SQL и отображать информацию. Я также пытаюсь захватить замыкания одновременно с построением графиков. Пока я могу успешно извлечь данные из базы данных, а затем отобразить информацию в UITableViewController
.
У меня есть простой UIViewController
с UIView
для отображения данных. До сих пор моя проблема в том, что все данные извлекаются из замыкания, но затем, когда я что-то делаю вне замыкания, нет данных.
@IBOutlet weak var lineChartView: LineChartView!
var sensorReadings: [SensorReadings] = []
var lineChartEntry = [ChartDataEntry]()
override func viewDidLoad() {
super.viewDidLoad()
let url = URL(string: "replaced with actual URL ")
URLSession.shared.dataTask(with: url!, completionHandler: {(data, response, error) in
guard let data = data, error == nil else { print(error!); return }
if error != nil {
print("Datatask Error: ", error!)
} else {
do {
if let sensorData = try JSONSerialization.jsonObject(with: data, options: []) as? [[String:String]] {
for sData in sensorData {
let dataId = sData["dataid"] ?? ""
let readingTime = sData["readingtime"] ?? ""
let sensorId = sData["sensorid"] ?? ""
let reading = sData["reading"] ?? ""
self.sensorReadings.append(SensorReadings(dataId: dataId, readingTime: readingTime, sensorId: sensorId, reading: reading))
}
}
} catch {
print("Serialization Error ", error)
}
}
}).resume()
// Creates an array of strings to hold reading values
var tempArray: [String] = []
// Loops through the downloadaed data
// Adds each of the readings to tempArray
for reading in self.sensorReadings {
tempArray.append(reading.reading)
}
// Convert String to Double
let doublesArray = tempArray.compactMap(Double.init)
// Chart Information
for i in 0..<doublesArray.count {
let value = ChartDataEntry(x: Double(i), y: doublesArray[i])
self.lineChartEntry.append(value)
}
let line = LineChartDataSet(entries: self.lineChartEntry, label: "Number")
line.colors = [NSUIColor.blue]
let chartData = LineChartData()
chartData.addDataSet(line)
self.lineChartView.data = chartData
self.lineChartView.chartDescription?.text = "Data"
}
Во-первых, я на правильном пути с получением данных из базы данных? Тогда как же я могу обновить диаграмму с информацией? Как вернуть информацию из URLSession? Или есть способ, которым я могу обновить диаграмму, как я делаю в `UITableView1:
DispatchQueue.main.async {
self.tableView.reloadData()
}