RxSwift - 如果满足条件,则阻止/停止/忽略事件

Posted

技术标签:

【中文标题】RxSwift - 如果满足条件,则阻止/停止/忽略事件【英文标题】:RxSwift - block/stop/ignore event if condition met 【发布时间】:2021-11-29 15:28:04 【问题描述】:

过滤一个 Observable 列表后,我可能有一个空列表。我只对包含填充列表的事件感兴趣。有什么办法可以阻止空事件传播到onNext


        let source: BehaviorRelay<[Int]> = .init(value: [])

        source
            .map  nums -> [Int] in
                return nums.filter  $0 < 10 
            
            /// What can go here to stop/block/ignore an empty list
            .subscribe(onNext:  nums in
               print("OKPDX \(nums)")
            )

        source.accept([1, 9, 13])
        // prints "[1, 9]" (all good)

        source.accept([20, 22, 101])
        // prints "[]" (not desirable, I'd rather not know)

【问题讨论】:

【参考方案1】:

使用.filter 怎么样?你可以这样做:

.map  nums -> [Int] in
        return nums.filter  $0 < 10 
     
.filter  !$0.isEmpty 

或者您也可以在收到这样的事件时验证:

.subscribe(onNext:  nums in
      guard !nums.isEmpty else  return 
      print("OKPDX \(nums)")
)

【讨论】:

正是我所追求的,谢谢

以上是关于RxSwift - 如果满足条件,则阻止/停止/忽略事件的主要内容,如果未能解决你的问题,请参考以下文章

RxSwift 结合 observable 和条件

如果不满足最小和最大条件,则阻止表单提交

如果满足条件,则 Obj-C 停止程序

如果条件不满足,则“短路”YARP RequestTransform 并返回自定义响应

如果满足某些条件,bootstrap-vue 复选框会阻止更改

如果条件为假,则阻止默认