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

    /// - parameter callback: The closure to invoke when the signal fires for the first time.
    #if swift(>=3.0)
    @discardableResult
    public func listenOnce(on listener: AnyObject, callback: SignalCallback) -> SignalListener<T> {
        let signalListener = self.listen(on: listener, callback: callback)
        signalListener.once = true
        return signalListener

        private var dispatchQueue: dispatch_queue_t?
    #endif
    
    #if swift(>=3.0)
    init (listener: AnyObject, callback: @escaping SignalCallback) {
        self.listener = listener
        self.callback = callback
    }
    #else
    init (listener: AnyObject, callback: SignalCallback) {
        self.listener = listener
        self.callback = callback
    }
    #endif
    
    func dispatch(data: T) -> Bool {
        guard listener != nil else {
