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

    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)
    }

    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)
    
