LoadPointsCompleted
принимает закрытие в качестве аргумента (обработчик завершения)
вы можете либо дать ему nil
обработчик завершения
LoadPointsCompleted(completion: nil)
, либо дать ему обработчик
LoadPointsCompleted() { sumOfPointsCompleted in
return <#some Int#>
}
но ваша логика в BalanceOfPoints
выглядит немного не так, потому что LoadPointsCompleted
и loadPointsRedeemed
вызываются последовательно в одно и то же время и также фактически не возвращают Int
, только обработчик завершенияфункция делает.например, completion(sumOfPointsCompleted)
можно изменить на let a = completion(sumOfPointsCompleted)
, но я уверен, что это не то, что вы намеревались.
Я бы изменил сигнатуру обеих этих функций на
func LoadPointsCompleted(completion: @escaping(_ sumOfPointsCompleted:Int) -> Void){
и
func loadPointsRedeemed(completion: @escaping (_ Points_Redeem: Int) -> Void) {
, затем в BalanceOfPoints
сделайте это вместо
func BalanceOfPoints(){
LoadPointsCompleted() { sumOfPointsCompleted in
loadPointsRedeemed() { Points_Redeem in
let balance = sumOfPointsCompleted - Points_Redeem
let balanceString = String(balance)
self.Points_Balance.text = balanceString
}
}
}
, но просто отметьте, что BalanceOfPoints
в настоящее время асинхронная функция.
Не уверен, что шаг 1 и 2в вашем вопросе может быть сделано параллельно, но кажется, что они могли бы быть, но, как оно стоит в этом ответе, они в последовательности