     /// The stepper value. Default = 0.
     public var value: Double = 0 {
         didSet {
-            if value > oldValue {
-                delegate?.KWStepperDidIncrement?()
-                incrementCallback?(self)
-            } else {
-                delegate?.KWStepperDidDecrement?()
-                decrementCallback?(self)
-            }
+            guard value != oldValue else { return }
 
             if value < minimumValue {
                 value = minimumValue

    /// Decrements the stepper `value` by `decrementStepValue`.
    public func decrementValue() {
        switch value - decrementStepValue {
        case let x where wraps && x < minimumValue:
            value = maximumValue
        case let x where x >= minimumValue:
            value = x
        default:
            endLongPress()
            delegate?.KWStepperMinValueClamped?()

    /// Increments the stepper `value` by `incrementStepValue`.
    public func incrementValue() {
        switch value + incrementStepValue {
        // The `value` is wrapped.
        case let x where wraps && x > maximumValue:
            value = minimumValue
        // The `value` is incremented.
        case let x where x <= maximumValue:
            value = x
            delegate?.KWStepperDidIncrement?()
            incrementCallback?(self)
        // The `value` is clamped.
        default:
            endLongPress()
            delegate?.KWStepperMaxValueClamped?()
