закрытие по typealias не отправлять данные - PullRequest
0 голосов
/ 11 апреля 2020

Я решил немного попрактиковаться с закрытием 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)
})

Как исправить это и получить существующие данные?

...