Ios 如何忽略RxSwift上的行为相关性元素删除?

Ios 如何忽略RxSwift上的行为相关性元素删除?,ios,swift,rx-swift,Ios,Swift,Rx Swift,我正在观察一个行为规则,我只想在项目数量增加时订阅。我尝试了distinct/dinstinctUntilChanged,但它不适合我的需要,因为它会跳过太多或太少次 behaviorRelay .compactMap { $0?.items } .subscribe(onNext: { elements in print("items has one more element.") }).disposed(by: bag) var behaviorRelay=beha

我正在观察一个行为规则,我只想在项目数量增加时订阅。我尝试了distinct/dinstinctUntilChanged,但它不适合我的需要,因为它会跳过太多或太少次

behaviorRelay
  .compactMap { $0?.items }
  .subscribe(onNext: { elements in
      print("items has one more element.")
  }).disposed(by: bag)
var behaviorRelay=behaviorRelay(值:[])


首先,使用
map
将数组映射到(元素的)个数:

.map{$0?.count±0}//如果数组为零,则返回0
然后使用
scan
,检索当前和以前的元素,如下所示:

.scan((0,0)){previousPairOfValues,newValue in
return(previousPairOfValues.1,newValue)//从newValue和前一对的第二项创建新对
}
然后使用
过滤器
,只传递递增的值:

.filter{$0.1>$0.0}//新值大于旧值
然后将其映射回最新值:

.map{$0.1}
综合起来:

behaviorRelay
.compactMap{$0?.items}
.map{$0?.count±0}//如果数组为nil,则返回0
.scan((0,0)){previousPairOfValues,newValue in
return(previousPairOfValues.1,newValue)//从newValue和前一对的第二项创建新对
}
.filter{$0.1>$0.0}//新值大于旧值
.map{$0.1}
.subscribe(onNext:{elementCount in
打印(“项目还有一个元素。”)
打印(“现在有\(elementCount)项”)
}).处置(由:袋)

首先,使用
映射
从数组映射到(元素的)个数:

.map{$0?.count±0}//如果数组为零,则返回0
然后使用
scan
,检索当前和以前的元素,如下所示:

.scan((0,0)){previousPairOfValues,newValue in
return(previousPairOfValues.1,newValue)//从newValue和前一对的第二项创建新对
}
然后使用
过滤器
,只传递递增的值:

.filter{$0.1>$0.0}//新值大于旧值
然后将其映射回最新值:

.map{$0.1}
综合起来:

behaviorRelay
.compactMap{$0?.items}
.map{$0?.count±0}//如果数组为nil,则返回0
.scan((0,0)){previousPairOfValues,newValue in
return(previousPairOfValues.1,newValue)//从newValue和前一对的第二项创建新对
}
.filter{$0.1>$0.0}//新值大于旧值
.map{$0.1}
.subscribe(onNext:{elementCount in
打印(“项目还有一个元素。”)
打印(“现在有\(elementCount)项”)
}).处置(由:袋)

如果数组中有5个项目,则删除一个项目,然后添加一个项目,这算不算,或者如果数组中有6个项目,您是否只希望收到通知?@DanielT。这是肯定的。关键是忽略减少,而不是附加。如果数组中有5个项目,则删除一个项目,然后添加一个项目,这算不算,或者如果数组中有6个项目,您是否只希望收到通知?@DanielT。这是肯定的。关键是要忽略减少,而不是附加。
class Car {
  var items: [Any] // whatever... just an example.
}