ReactiveSwift: повторите до n раз, затем выполните некоторый код
Рассмотрим код ниже
func test() -> SignalProducer<String, Error> {
return SignalProducer<String, Error> { observer, _ in
...
}
}
test()
.on(value: { s in
print(s)
})
.retry(upTo: 2)
.start()
}
Есть ли встроенный способ повторить n раз, а затем (если не удалось выполнить все попытки) выполнить какой-либо обратный вызов?
Конечно, можно ввести локальный счетчик и подсчитать ошибки в .on(failed: _)
а затем сделать что-то, если счетчик равен n+1, но есть ли другой способ сделать это?
1 ответ
Решение
retry(upTo:)
передает ошибку, как только она достигает предела повторных попыток, так что вы можете использовать один из start
методы, которые позволяют обрабатывать значения и ошибки. Например, используя startWithResult
Вы можете сделать это (заметьте, я не тестировал этот код, но он должен дать вам идею):
test()
.retry(upTo: 2)
.startWithResult { result in
switch result {
case let .success(value):
print(value)
case let .failed(error):
// handle error here
}
}