Skip to content

Instantly share code, notes, and snippets.

@JRHeaton
Created January 10, 2015 17:07
Show Gist options
  • Select an option

  • Save JRHeaton/524e05be757ac027e4b0 to your computer and use it in GitHub Desktop.

Select an option

Save JRHeaton/524e05be757ac027e4b0 to your computer and use it in GitHub Desktop.
//
// SignalExtensions.swift
// Fan Club
//
// Created by John Heaton on 12/18/14.
// Copyright (c) 2014 StageBloc. All rights reserved.
//
import Foundation
// KVO signals
extension NSObject {
func RACObserve(object: NSObject, _ keyPath: String) -> RACSignal {
return object.rac_valuesForKeyPath(keyPath, observer: self)
}
func RACObserveMain(object: NSObject, _ keyPath: String) -> RACSignal {
return object.rac_valuesForKeyPath(keyPath, observer: self).deliverOnMain().dieWith(self)
}
}
// Signal operators
extension RACSignal {
func doNextAs<T>(closure: T -> ()) -> RACSignal {
return doNext { closure($0 as T) }
}
func mapAs<T>(closure: T -> NSObject) -> RACSignal {
return map { closure($0 as T) }
}
func subscribeNextAs<T>(closure: T -> ()) -> RACDisposable {
return subscribeNext { closure($0 as T) }
}
func deliverOnMain() -> RACSignal {
return deliverOn(.mainThreadScheduler())
}
func dieWith(object: NSObject) -> RACSignal {
return takeUntil(object.rac_willDeallocSignal())
}
func performSelector(selector: Selector, onObject object: NSObject) -> RACDisposable {
return mapToSelector(selector, onObject: object)
}
func subscribeNextBlind(f: () -> ()) -> RACDisposable {
return subscribeNext { _ in f() }
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment