     }
     
     /**
-     Creates and returns a new NSTimer object and schedules it on the current run loop in the default mode.
+     Creates and returns a new Timer object and schedules it on the current run loop in the default mode.
      - parameter timeInterval: The number of seconds between firings of the timer. If ti is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead.
      - parameter userInfo: Custom user info for the timer. The timer maintains a strong reference to this object until it (the timer) is invalidated. This parameter is nil by default.
      - parameter repeats: If true, the timer will repeatedly reschedule itself until invalidated. If false, the timer will be invalidated after it fires. Default is false
      - parameter action: The closure called on the timeout
-     - returns: A new NSTimer object, configured according to the specified parameters.
+     - returns: A new Timer object, configured according to the specified parameters.
      */
     @discardableResult
     public class func scheduledTimer(timeInterval: TimeInterval, userInfo: AnyObject? = nil, repeats: Bool = false, action: @escaping (Void) -> Void) -> Timer {

    }
    
    /**
     Initializes a new NSTimer object using the specified action.
     The receiver, initialized such that, when added to a run loop, it will fire at date and then, if repeats is true, every ti after that.
     - parameter timeInterval: The number of seconds between firings of the timer. If ti is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead.
     - parameter userInfo: Custom user info for the timer. The timer maintains a strong reference to this object until it (the timer) is invalidated. This parameter is nil by default.
     - parameter repeats: If true, the timer will repeatedly reschedule itself until invalidated. If false, the timer will be invalidated after it fires. Default is false
     - parameter action: The closure called on the timeout
     - returns: A new NSTimer object, configured according to the specified parameters.
     */
    public convenience init(timeInterval interval: TimeInterval, userInfo: AnyObject? = nil, repeats: Bool = false, action: @escaping (Void) -> Void) {
        let action = VoidAction(action: action)

    
    // MARK: Scheduele with interval
    /** 
     Creates and returns a new Timer object and schedules it on the current run loop in the default mode.
     - parameter timeInterval: The number of seconds between firings of the timer. If ti is less than or equal to 0.0, this method chooses the nonnegative value of 0.1 milliseconds instead.
     - parameter userInfo: Custom user info for the timer. The timer maintains a strong reference to this object until it (the timer) is invalidated. This parameter is nil by default.
     - parameter repeats: If true, the timer will repeatedly reschedule itself until invalidated. If false, the timer will be invalidated after it fires. Default is false
     - parameter action: The closure called on the timeout
     - returns: A new Timer object, configured according to the specified parameters.
     */
    @discardableResult
    public class func scheduledTimer<T: Timer>(timeInterval: TimeInterval, userInfo: AnyObject? = nil, repeats: Bool = false, action: @escaping (T) -> Void) -> Timer {
