filter運算

說明:
Filters the elements of an observable sequence based on a predicate

filter

代碼如下:

extension ObservableType {
    public func filter(predicate: (E) throws ->Bool)->Observable<E> {
        return Filter(source: asObservable(), predicate: predicate)
    }
}

class Filter<Element>: Producer<Element> {
    typealias Predicate = (Element) throws->Bool

    private let _source: Observable<Element>
    private let _predicate: Predicate

    init(source: Observable<Element>, predicate: Predicate) {
        _source = source
        _predicate = predicate
    }

    override func run<O: ObserverType where O.E == Element>(observer: O)->Disposable {
        let sink = FilterSink(predicate: _predicate, observer: observer)
        sink.disposable = _source.subscribe(sink)
        return sink
    }
}

class FilterSink<O: ObserverType>: Sink<O>, ObserverType {
    typealias Predicate = (Element) throws ->Bool
    typealias Element = O.E

    typealias Parent = Filter<Element>

    private let _predicate: Predicate

    init(predicate: Predicate, observer: O) {
        _predicate = predicate
        super.init(observer: observer)
    }

    func on(event: Event<Element>) {
        switch event {
        case .Next(let value):
            do {
                let satisfies = try _predicate(value)
                if satisfies {
                    forwardOn(.Next(value))
                }
            }catch let e {
                forwardOn(.Error(e))
                dispose()
            }
        case .Completed, .Error:
            forwardOn(event)
            dispose()
        }
    }
}
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末凉当,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子秕岛,更是在濱河造成了極大的恐慌椒振,老刑警劉巖削彬,帶你破解...
    沈念sama閱讀 206,602評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件叶圃,死亡現(xiàn)場離奇詭異,居然都是意外死亡布轿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評論 2 382
  • 文/潘曉璐 我一進店門来颤,熙熙樓的掌柜王于貴愁眉苦臉地迎上來汰扭,“玉大人,你說我怎么就攤上這事脚曾《遥” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評論 0 344
  • 文/不壞的土叔 我叫張陵本讥,是天一觀的道長珊泳。 經(jīng)常有香客問我,道長拷沸,這世上最難降的妖魔是什么色查? 我笑而不...
    開封第一講書人閱讀 55,306評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮撞芍,結果婚禮上秧了,老公的妹妹穿的比我還像新娘。我一直安慰自己序无,他們只是感情好验毡,可當我...
    茶點故事閱讀 64,330評論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著帝嗡,像睡著了一般晶通。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哟玷,一...
    開封第一講書人閱讀 49,071評論 1 285
  • 那天狮辽,我揣著相機與錄音,去河邊找鬼巢寡。 笑死喉脖,一個胖子當著我的面吹牛,可吹牛的內容都是我干的抑月。 我是一名探鬼主播树叽,決...
    沈念sama閱讀 38,382評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谦絮!你這毒婦竟也來了题诵?” 一聲冷哼從身側響起须误,我...
    開封第一講書人閱讀 37,006評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎仇轻,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體奶甘,經(jīng)...
    沈念sama閱讀 43,512評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡篷店,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 35,965評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了臭家。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片疲陕。...
    茶點故事閱讀 38,094評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖钉赁,靈堂內的尸體忽然破棺而出蹄殃,到底是詐尸還是另有隱情,我是刑警寧澤你踩,帶...
    沈念sama閱讀 33,732評論 4 323
  • 正文 年R本政府宣布诅岩,位于F島的核電站,受9級特大地震影響带膜,放射性物質發(fā)生泄漏吩谦。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,283評論 3 307
  • 文/蒙蒙 一膝藕、第九天 我趴在偏房一處隱蔽的房頂上張望式廷。 院中可真熱鬧,春花似錦芭挽、人聲如沸滑废。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蠕趁。三九已至,卻和暖如春饿敲,著一層夾襖步出監(jiān)牢的瞬間妻导,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評論 1 262
  • 我被黑心中介騙來泰國打工怀各, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留倔韭,地道東北人。 一個月前我還...
    沈念sama閱讀 45,536評論 2 354
  • 正文 我出身青樓瓢对,卻偏偏與公主長得像寿酌,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子硕蛹,可洞房花燭夜當晚...
    茶點故事閱讀 42,828評論 2 345

推薦閱讀更多精彩內容

  • 我現(xiàn)在之所以用OneNote 來寫這篇文章醇疼,是因為我現(xiàn)在正坐在醫(yī)院的病區(qū)里硕并,不是我或者家人生病,而是這就是我的工作...
    趙先森閱讀 510評論 2 2
  • 下班回來秧荆,半路被一條黃貓攔住去路倔毙!“喵喵喵”的不停叫喚,好生可憐乙濒。是餓了么陕赃,可是我沒有可以吃的呀,我只能對它也喵幾...
    紫蒲溪溪主閱讀 264評論 4 3
  • 天杞園真實案例(從瘦子到胖子,再從胖到瘦大起大落的人生 曾經(jīng)身高180cm颁股,體重120的我么库,瘦得像筷子一樣,人見人...
    霸氣你強哥閱讀 1,175評論 0 0