public protocol ObservablePropertyType {
    typealias ValueType
    var value: ValueType { get set }
}

public class ObservableProperty<ValueType> {
    public typealias CallbackType = (ValueType -> ())
    private var _value: ValueType
    private var subscriptions = [CallbackType]()

    public var value: ValueType {
        get {
            return self._value
        }
        set {
            self._value = newValue
            notifySubscriptions()
        }
    }

    public init(_ value: ValueType) {
        self._value = value
    }

    public func subscribe(callback: CallbackType) {
        subscriptions.append(callback)
    }

    private func notifySubscriptions() {
        for subscription in subscriptions {
            subscription(value)
        }
    }
}

extension ObservableProperty: ObservablePropertyType { }

public protocol ObservablePropertyType {
    typealias ValueType
    var value: ValueType { get set }
}

public class ObservableProperty<ValueType> {
    public typealias CallbackType = (ValueType -> ())

    private var subscriptions = [CallbackType]()

    public var value: ValueType {
        didSet {
            notifySubscriptions()
        }
    }

    public init(_ value: ValueType) {
        self.value = value
    }

    public func subscribe(callback: CallbackType) {
        subscriptions.append(callback)
    }

    private func notifySubscriptions() {
        for subscription in subscriptions {
            subscription(value)
        }
    }
}

extension ObservableProperty: ObservablePropertyType { }

Use didSet instead of a private var
Use didSet instead of a private var

Using a private var here is overkill. If all we need to do is notify our
subscribers that we've changed our value, we can do that by triggering
on didSet.
