 
 // MARK: -
 private class ObserverWrapper<T>: Disposable {
-  init(subject: Subject<T>, function: (T?) -> Void) {
+  init(subject: Subject<T>, function: (T) -> Void) {
     self.subject = subject
     self.function = function
   }
   
-  func update(value: T?) {
+  func update(value: T) {
     function(value)
   }
   

    To observe changes in the subject, attach a block.
    When you want observation to end, call `dispose` on the returned Disposable
   */
  public func attach(observer: (T?) -> Void) -> Disposable {
    let wrapped = ObserverWrapper(subject: self, function: observer)
    observers.append(wrapped)
    

    The value that is to be observered.
    All current observers will be notified when it is assigned to.
   */
  public var value: T {
    didSet {
      notify()
    }
  }
  
  init(value: T) {
    self.value = value
  }
  
