Я использую эту функцию для вызова информации json из базы данных - она получает информацию в порядке.
Но она не продолжается после «getHistoricalMonthlyData». поэтому он не попадет на печать («****** строка 55»). (да, я планирую сделать эту функцию, как только выясню проблему.)
она напечатает отлично "print (i.stock)".
Я могу поделиться "getHistoricalMonthlyData"код, но он работает нормально, и я сомневаюсь, что это проблема.
Я не очень хорош с обработчиками завершения, и я подозреваю, что это проблема?
ниже приведена функция" getHistoricalMonthlyData ", котораяЯ не могу пройти мимо.
func calculateMonthPerformance (setting: settings) {
let set = setting
let u = User.getUser()
var i = Indexes()
getHistoricalMonthlyData(symbol: symbol, beg: set.monthBeg, end: set.monthEnd) { (json, error ) in
if let error = error {
print ("error", error)
} else if let json = json {
print ("success")
i.stock = json
print(47)
}
// this is fine
print(50)
print(i.stock)
}
// nothing at this point
print("****** line 55")
}
Так настроена функция json и она отлично работает в другом проекте.
у нее есть резюме.
func getHistoricalMonthlyData(symbol: String, beg: Date, end: Date, completionHandler: @escaping ([HistoricalData]?, Error?) -> Void) {
let beg = beg.dateAtStartOf(.month).toFormat("yyyy-MM-dd")
let end = end.dateAtEndOf(.month).toFormat("yyyy-MM-dd")
let jsonUrl = "https://eodhistoricaldata.com/api/eod/\(symbol).US?from=\(beg)&to=\(end)&api_token=\(EOD_KEY)&period=eom&fmt=json"
guard let url = URL(string: jsonUrl) else {
print("Error: cannot create URL")
let error = BackendError.urlError(reason: "Could not create URL")
completionHandler(nil, error)
return
}
URLSession.shared.dataTask(with: url) { (data, response, error) in
guard error == nil else {
completionHandler(nil, error!)
return
}
guard let jasonData = data else {
print("Error: did not receive data")
let error = BackendError.objectSerialization(reason: "No data in response")
completionHandler(nil, error)
return
}
do {
let historical = try JSONDecoder().decode([HistoricalData].self, from: jasonData )
completionHandler(historical, nil)
} catch let jsonErr {
print ("Error serializing json", jsonErr )
let error = BackendError.objectSerialization(reason: "Couldn't create a todo object from the JSON")
completionHandler(nil, error)
}
}.resume()
}
спасибо.