Twitter for iOSには選択中のタブをもう1度タップしたら最上部までスクロールするという機能があります。便利ですね。

こういう機能を実装するには、1つ前に選択されていた値が何なのか知る必要があります。 桶の時代にはプロパティに前回の値を保存するのが定石でしたが、川の時代にはskip(1)してzip()するというのが定石です(たぶん)。

let tappedIndex: Observable<Int> = ...

Observable
    .zip(tappedIndex, tappedIndex.skip(1)) { previousIndex, currentIndex in
        return previousIndex == currentIndex
    }
    .filter { $0 }
    .subscribeNext { _ in
        // 最上部までスクロール
    }
    .addDisposableTo(disposeBag)

この手はスクロール速度の取得にも応用できます。

let scrollView: UIScrollView = ...
let offset = scrollView.rx_contentOffset
let velocityY = Observable
    .zip(offset, offset.skip(1)) { previousOffset, currentOffset in
        return currentOffset.y - previousOffset.y 
    }

追記

currentとpreviousが逆だったので直しました。

参考