Skip to content

Instantly share code, notes, and snippets.

@danielt1263
Last active August 28, 2018 21:31
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 danielt1263/21150be3ab8df389357d1a8ec9007302 to your computer and use it in GitHub Desktop.
Save danielt1263/21150be3ab8df389357d1a8ec9007302 to your computer and use it in GitHub Desktop.
Experimental idea for binding to views that don't exist yet in viewDidLoad.
//
// Observables.swift
//
// Created by Daniel Tartaglia on 8/13/18.
// Copyright © 2018 Daniel Tartaglia. MIT License.
//
extension ObservableType {
func bind(to observables: Observables<String, E>, withKey key: String) -> Disposable {
return observables.insert(key: key, value: self)
}
}
class Observables<K, T> where K: Hashable {
func insert<O: ObservableType>(key: K, value: O) -> Disposable where O.E == T {
ensureSubject(for: key)
return value.bind(to: subjects[key]!)
}
subscript (_ key: K) -> Observable<T> {
ensureSubject(for: key)
return subjects[key]!.asObservable()
}
private var subjects: [K: PublishSubject<T>] = [:]
private let bag = DisposeBag()
private func ensureSubject(for key: K) {
if subjects[key] == nil {
subjects[key] = PublishSubject<T>()
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment