Ignoring/filtering 无

Ignoring/filtering nil

有没有可以过滤的运算符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 { [=11=].hasValue() }
    }
}

但是,在 .notNil() 之后,E 仍然是可选的,因此后续的链接运算符仍然将 self 视为 Observer<E>,其中 E 是可选的。所以我仍然需要一个额外的操作员来做:

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

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

https://github.com/RxSwiftCommunity/RxSwift-Ext 结账 unwrap :)

https://github.com/RxSwiftCommunity/RxOptional

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

P/S:这些家伙(我说的是这些存储库的所有者)每天在 RxSwift 的闲暇时间互相聊天 :)

在 RxSwift 5 中,可以使用来自核心库的 compactMap

observable.compactMap { [=10=] }
  • 要过滤掉 nil 值,请使用 RxSwiftExt.unwrap()
  • 要仅过滤 nil 值,只需执行以下操作:
observableContainingNils.filter { [=10=] == .none }