You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
// // distinct+RxCocoa.swift // RxSwiftExt // // Created by Rafael Ferreira on 3/8/17. // Copyright © 2017 RxSwift Community. All rights reserved. //
import RxCocoa
extension SharedSequence { /**
Suppress duplicate items emitted by an SharedSequence - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html) - parameter predicate: predicate determines whether element distinct
- returns: An shared sequence only containing the distinct contiguous elements, based on predicate, from the source sequence. */ public func distinct(_ predicate: @escaping (Element) -> Bool) -> SharedSequence<SharingStrategy, Element> { var cache = [Element]()
return flatMap { element -> SharedSequence<SharingStrategy, Element> in if cache.contains(where: predicate) { return SharedSequence<SharingStrategy, Element>.empty() } else { cache.append(element)
return SharedSequence<SharingStrategy, Element>.just(element) } } } }
extension SharedSequence where Element: Equatable { /**
Suppress duplicate items emitted by an SharedSequence - seealso: [distinct operator on reactivex.io](http://reactivex.io/documentation/operators/distinct.html) - returns: An shared sequence only containing the distinct contiguous elements, based on equality operator, from the source sequence. */ public func distinct() -> SharedSequence<SharingStrategy, Element> { var cache = [Element]()
return flatMap { element -> SharedSequence<SharingStrategy, Element> in if cache.contains(element) { return SharedSequence<SharingStrategy, Element>.empty() } else { cache.append(element)
return SharedSequence<SharingStrategy, Element>.just(element) } } } }
|