 /// Create instances of Signal and assign them to public constants on your class for each event type that can
 /// be observed by listeners.
 final public class Signal<T> {
-    #if swift(>=3.0)
-    public typealias SignalCallback = @escaping (T) -> Void
-    #else
     public typealias SignalCallback = (T) -> Void
-    #endif
     
     /// The number of times the signal has fired.
     public private(set) var fireCount: Int = 0

    /// - parameter callback: The closure to invoke whenever the signal fires.
    #if swift(>=3.0)
    @discardableResult
    public func listenPast(on listener: AnyObject, callback: SignalCallback) -> SignalListener<T> {
        let signalListener = self.listen(on: listener, callback: callback)
        if let lastDataFired = lastDataFired {
            signalListener.callback(lastDataFired)


/// A SignalLister represenents an instance and its association with a Signal.
public class SignalListener<T> {
    public typealias SignalCallback = (T) -> Void
    public typealias SignalFilter = (T) -> Bool
    
    // The listener
    weak public var listener: AnyObject?
