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
        }
    }
Другие вопросы по тегам