Skip to content

Instantly share code, notes, and snippets.

Videos

class ReactiveShortViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let pan = UIPanGestureRecognizer()
pan.delegate = self
let rotate = UIRotationGestureRecognizer()
rotate.delegate = self
view.gestureRecognizers = [pan, rotate]
class ImperativeShortViewController: UIViewController {
private var timerCreator: TimerCreator
private var panPresent = false
private var rotatePresent = false
private var gestureTimer: TimerType?
private var secondsLeft = 3
private var tickCount = 0
init(timerCreator: TimerCreator) {
// Fire API request
searchBar
.rx_text
.throttle(0.5, scheduler: MainScheduler.instance)
.distinctUntilChanged()
.filter { $0.characters.count > 0 }
.flatMapLatest { findRepository($0).retry(3) }
.flatMapLatest { repository -> [Issue] in
return findIssues(repository)
}
// Fire API request then bindTo Tableview
searchBar
.rx_text
.throttle(0.5, scheduler: MainScheduler.instance)
.distinctUntilChanged()
.filter { $0.characters.count > 0 }
.flatMapLatest { findRepository($0) }
.flatMapLatest { repository -> [Issue] in
return findIssues(repository)
}
private var lastScheduledWord: dispatch_cancelable_block_t?
private var lastRequest: NSURLSessionTask?
func searchRepository(keyword: String) {
cancel_block(lastScheduledWord)
lastRequest?.cancel()
lastRequest = nil
lastScheduledWord = dispatch_after_delay(0.5) {
private var lastScheduledWord: dispatch_cancelable_block_t?
private var lastRequest: NSURLSessionTask?
var numberOfRetries = 3
let NUMBER_OF_RETRIES = 3
func searchRepository(keyword: String) {
cancel_block(lastScheduledWord)
lastRequest?.cancel()
lastRequest = nil
@dangthaison91
dangthaison91 / then.swift
Last active December 30, 2018 09:36
RxSwift - Then
@jamiepinkham
public extension ObservableType {
func then(closure: () -> Observable<E>?) -> Observable<E> {
return then(closure() ?? .empty())
}
func then(@autoclosure(escaping) closure: () -> Observable<E>) -> Observable<E> {
let next = Observable.deferred {
@dangthaison91
dangthaison91 / Eureka RxSwift.swift
Last active August 11, 2021 07:29
RxSwift Extension that support two way binding with Eureka.
extension RowOf: ReactiveCompatible {}
extension Reactive where Base: RowType, Base: BaseRow {
var value: ControlProperty<Base.Cell.Value?> {
let source = Observable<Base.Cell.Value?>.create { observer in
self.base.onChange { row in
observer.onNext(row.value)
}
return Disposables.create()
// ObservableBuffer.swift
//
// Created by Daniel Tartaglia
// Copyright © 2017 Daniel Tartaglia. MIT License.
extension Observable {
/// collects elements from the source sequence until the boundary sequence fires. Then it emits the elements as an array and begins collecting again.
func buffer<U>(_ boundary: Observable<U>) -> Observable<[E]> {
return Observable<[E]>.create { observer in