Generics 通过可观测的闭包的泛型func
我必须制定一个方法,在我的条件为真时可以观察到。我在闭包中通过如下条件: Observable.retrySource{$0!=20} 我的func必须使用通用参数,如map、flatMap 扩展类型{Generics 通过可观测的闭包的泛型func,generics,closures,observable,rx-swift,Generics,Closures,Observable,Rx Swift,我必须制定一个方法,在我的条件为真时可以观察到。我在闭包中通过如下条件: Observable.retrySource{$0!=20} 我的func必须使用通用参数,如map、flatMap 扩展类型{ func retrySource<T: Error>(closure: @escaping (T) -> Bool) -> Observable<E> { return retryWhen { (error: Observable<T>)
func retrySource<T: Error>(closure: @escaping (T) -> Bool) -> Observable<E> {
return retryWhen { (error: Observable<T>) in
return error
.flatMap { value -> Observable<Void> in
guard closure(value) else {
return .error(error as! Error)
}
return Observable.just(Void())
}
}
}
如果我理解你想要什么,这应该可以,但在你发布的示例代码中不行。那会重新订阅按钮,根本没有任何意义 请尝试以下示例:
numberButton.rx.tap
.flatMapLatest {
randomProducer(0..<6) // random int
.asObservable()
.retrySource { $0 != 5 } // but can't equal 5
}
.subscribe(onNext: { print($0) },
onError: { print($0) },
onCompleted: { print("finish") })
.disposed(by: bag)
我不理解上下文。一个可观察对象会发出多个事件。是否要筛选事件,以便在$0!=20时不会发出该值?嗨!我想当$0!=20为false时,我的可观察开始会再次发出值,以便使用两个可观察对象?不)只有一个可观察对象我编写新代码/它已编译但不起作用(现在你所要做的就是接受正确的答案。谢谢!
numberButton.rx.tap
.flatMapLatest {
randomProducer(0..<6) // random int
.asObservable()
.retrySource { $0 != 5 } // but can't equal 5
}
.subscribe(onNext: { print($0) },
onError: { print($0) },
onCompleted: { print("finish") })
.disposed(by: bag)
extension ObservableType {
func retrySource(_ pred: @escaping (E) -> Bool) -> Observable<E> {
return map { element in
guard pred(element) else { throw RetrySourceError() }
return element
}
.retryWhen { error in
error.map {
guard $0 is RetrySourceError else { throw $0 }
}
}
}
}
struct RetrySourceError: Error { }
func randomProducer(_ range: Range<Int>) -> Single<Int> {
return Single.create {
$0(.success(Int.random(in: range)))
return Disposables.create()
}
}