Оператор .retry(_:)
действительно предназначен для повторных попыток, которые могут привести к сбою, например сетевых запросов.Похоже, вам нужен таймер вместо этого.К счастью, начиная с Xcode 11 beta 2, Apple добавила поддержку Publisher в класс Timer
в Foundation.
Еще один комментарий о вашей реализации: я предполагаю, что этот код используется в BindableObject
, потому что выдоступ didChange
.Поскольку didChange
может быть любого типа Publisher
, почему бы не использовать ваше свойство shouldDisplay
в качестве Publisher
?
final class MyModel: BindableObject {
var didChange: CurrentValueSubject<Bool, Never> { shouldDisplaySubject }
var shouldDisplay: Bool { shouldDisplaySubject.value }
private let shouldDisplaySubject = CurrentValueSubject<Bool, Never>(false)
private var cancellables: Set<AnyCancellable> = []
init() {
startTimer()
}
private func startTimer() {
Timer.publish(every: 2, on: .main, in: .default)
.autoconnect()
.scan(false) { shouldDisplay, _ in
!shouldDisplay
}
.assign(to: \.value, on: shouldDisplaySubject)
.store(in: &cancellables)
}
}