     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 {
+  public func attach(observer: (T) -> Void) -> Disposable {
     let wrapped = ObserverWrapper(subject: self, function: observer)
     observers.append(wrapped)
     

    return wrapped
  }
  
  func map<U>(transform: (T?) -> U) -> Subject<U> {
    let result: Subject<U> = Subject<U>(value: nil)
    result.disposable = self.attach { [weak result] value in
      result?.value = transform(value)
    }


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