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 }
有没有可以过滤的运算符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 }