4

有可以过滤的运营商nil吗?我最接近的是这里提到的解决方案:https ://github.com/ReactiveX/RxSwift/issues/209#issuecomment-150842686

相关摘录:

public protocol OptionalType {
    func hasValue() -> Bool
}

extension Optional: OptionalType {
    public func hasValue() -> Bool {
        return (self != nil)
    }
}

public extension ObservableType where E: OptionalType {
    @warn_unused_result(message="http://git.io/rxs.uo")
    public func notNil() -> Observable<E> {
        return self.filter { $0.hasValue() }
    }
}

但是, after .notNil(),E仍然是可选的,因此后续的链式运算符仍然认为selfwhereObserver<E>E可选的。所以我仍然需要一个额外的运算符:

.map { (username: String?) -> String in
    return username!
}

我肯定错过了什么。这似乎是一个非常普遍的需求。

4

3 回答 3

33

在 RxSwift 5 中,可以使用compactMap核心库:

observable.compactMap { $0 }
于 2019-06-27T18:44:00.580 回答
3

unwraphttps://github.com/RxSwiftCommunity/RxSwift-Ext结帐:)

https://github.com/RxSwiftCommunity/RxOptional

目前,您应该将其RxOptional用于您的个人需求
但是,RxSwift-Ext在接下来的 2-3 个月内将呈指数增长 :)

P/S:这些人(我说的是这些回购的所有者)每天在RxSwiftslack 上互相聊天 :)

于 2016-04-12T01:11:14.700 回答
0
  • 要过滤掉这些nil值,请使用RxSwiftExt.unwrap()
  • 要仅过滤nil值,只需执行以下操作:
observableContainingNils.filter { $0 == .none }
于 2021-01-13T09:54:08.737 回答