             changeListener(_value)
         }
     }
+    
+    public var labelFunction:((value:ValueType?) -> String)?
+    
+    public var label:String?{
+        return labelFunction?(value: value)
+    }
 }
        }
    }
    
    public init(initialValue:T?){
        _value = initialValue
        _changeListeners = Dictionary<NSObject, ((T?) -> Void)>()
    }

    public func addListener(owner:NSObject, listener:(T?) -> Void, alertNow:Bool = false){
        _changeListeners[owner] = listener
        
        if(alertNow){


import Foundation

public class BindableValue<ValueType:Any>{
    private var _value:ValueType?
    private var _changeListeners:Dictionary<NSObject, ((ValueType?) -> Void)>
    
    public var value:ValueType?{
        get{
            return _value
        }
