Skip to content

Instantly share code, notes, and snippets.

@freak4pc
Created October 5, 2018 11:05
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save freak4pc/d951e79a519775eba1a5066643a58461 to your computer and use it in GitHub Desktop.
Save freak4pc/d951e79a519775eba1a5066643a58461 to your computer and use it in GitHub Desktop.
RxArray - A basic Reactive RxSwift array
import Foundation
import RxSwift
struct RxArray<T: Hashable> {
private let storage: BehaviorRelay<[T]>
private let lock = NSRecursiveLock()
var items: Observable<[T]> {
return storage.asObservable()
}
var count: Observable<Int> {
return storage.map { $0.count }
}
init(elements: [T] = []) {
storage = BehaviorRelay(value: elements)
}
func append(_ element: T) {
lock.lock(); defer { lock.unlock() }
storage.accept(storage.value + [element])
}
func removeFirst(_ element: T) {
lock.lock(); defer { lock.unlock() }
var items = storage.value
guard let idx = items.index(of: element) else { return }
items.remove(at: idx)
storage.accept(items)
}
func removeAll(_ element: T) {
lock.lock(); defer { lock.unlock() }
storage.accept(storage.value.filter { $0 != element })
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment