Как получить сумму некоторых замыканий - PullRequest
1 голос
/ 27 октября 2019

2 простых функции с экранирующими замыканиями

func A(closure: @escaping (Int) -> () {
       //some delay
         closure(value1)
    }

func B(closure: @escaping (Int) -> () {
   //some delay
     closure(value2)
}

В другой функции мне нужно получить сумму value1 и value2

, например

func sum(completion: @escaping: (Int)->()){
     A(closure: { value1 in
        B(closure: { value2 in 
           sum = value1 + value2
           completion(sum)
        })
     })
}

Но я надеваюне понимаю, что делать, если мне нужно суммировать результаты многих функций

1 Ответ

0 голосов
/ 27 октября 2019

Вы можете использовать DispatchGroup

    func a(closure: @escaping (Int) -> ()) {
       //some delay
         closure(value1)
    }

    func b(closure: @escaping (Int) -> ()) {
       //some delay
         closure(value2)
    }

    func c(closure: @escaping (Int) -> ()) {
       //some delay
         closure(value3)
    }

    func sum(completion: @escaping: (Int)->()){
        let g = DispatchGroup()
        var sum = 0
         g.enter()
         a(closure: { value1 in
            sum += value1
            g.leave()
         })
         g.enter()
        b(closure: { value2 in
           sum += value2
           g.leave()
        })
         g.enter()
        c(closure: { value3 in
           sum += value3
           g.leave()
        })

        g.notify(queue: .main) {
            completion(sum)
        }

    }
...