Я решил немного попрактиковаться с закрытием typealias, но у меня была проблема с тем, что представление не получает данные от докладчика. Код работает для меня непостижимым образом. У меня уже есть закрытие typealias, которое передает данные, когда пользователь передает разрешение, чтобы получить местоположение, и это работает. Когда я вставляю свою функцию для передачи данных в это рабочее закрытие typealias, я получаю данные в поле зрения, но я должен удалить запись этой функции в рабочем закрытии и создать новую функцию, после чего я больше не получаю данные. Почему это так?
Ниже я приложу рабочий и нерабочий код
func chartsIt() {
viewModel.charts = { [weak self] chartsData in
self?.chartsView.data = chartsData
print(chartsData)
}
}
func location() {
self.viewModel.completion = { [weak self] item, one in
//self?.viewModel.createCharts(item.map { $0.date}, self?.goals ?? [0.0])
**if you leave this line commented out the chartsIt function will not work**
}
в коде докладчика (viewmodel):
typealias chartsData = (ChartData) -> Void
let players = ["Ozil”, “Ramsey”, “Laca”, “Auba”, “Xhaka”, “Torreira"]
let goals = [6.0, 8.0, 26.0, 30.0, 8.0, 10.0]
var charts: chartsData?
var completion: type?
func byLocation(lat: Double, lon: Double) {
let Operator = Init(test: Test(str: nil, key: nil, lat: lat, lon: lon))
NetworkService.request(router: Operator.geoLocate()) { [weak self] data in
if let key = data["Key"].string {
guard let int = Int(key) else { return }
self?.weatherFiveDayRequest(key: int) { item, one in
self?.weather = item
self?.completion?(item,one)
}
}
}
}
func weatherFiveDayRequest(key: Int, completion: @escaping (type)) {
**off-topic code**
}
func createCharts(_ dataPoints: [String], _ values: [Double]) {
guard let charts = charts else { return }
var dataEntry: [BarChartDataEntry] = []
for item in 0..<dataPoints.count {
let dataEnter = BarChartDataEntry(x: values[item], y: Double(item))
dataEntry.append(dataEnter)
let chartDataSet = BarChartDataSet(entries: dataEntry, label: "Units Sold")
let chartData = BarChartData(dataSet: chartDataSet)
charts(chartData)
}
}
//here trigger byLocation () function
init(data: NetworkService) {
self.NetworkService = data
super.init()
locationManager = LocationManager(locationResponse: { item in
print(item.coordinate.latitude)
self.byLocation(lat: item.coordinate.latitude, lon: item.coordinate.latitude)
})
Как исправить это и получить существующие данные?