目前我这样做:
Observable.just([1, 2, 3, 4])
.flatMapLatest {
numbers in
guard number = numbers.first else {
return Objservable.empty()
}
return Observable.just(number)
}
是否有更惯用的方式来执行此操作或我可以使用的任何预构建的操作符?
答案 0 :(得分:2)
您实施它的方式绝对正确。我只是使用flatMap
代替flatMapLatest
,因为它是一个更通用的运算符,我们不需要flatMapLatest
的特殊逻辑。
您可以创建自己的运算符,该运算符适用于Collection
类型的observable。
extension Observable where Element : Collection {
func mapFirst() -> Observable<Element.Iterator.Element> {
return self.flatMap { elements in
guard number = numbers.first else {
return Objservable.empty()
}
return Observable.just(number)
}
}
}
答案 1 :(得分:1)
您的解决方案非常好,您可以例如。把它转移到扩展中,它会更加通用。 但如果您真的想以其他方式这样做:您可以查看RxOptionals并将其用作:
Observable.just([1, 2, 3, 4])
.filterEmpty()
.map { $0.first }
.filterNil()