title: Why "String?" does not conform to Equatable
body: <p>I create <code>Observable</code> class to implement observer pattern in Swift. When a value is changed from old value, this notifies to subscribers, so this generics type should conform to Equatable protocol.
  But when a type is <code>String?</code> , Xcode raise　<code>Type 'String?' does not conform to protocol 'Equatable'</code> error.</p>
  
  <p>If I remember correctly, <code>String</code> and <code>String?</code> conforms to Equatable protocol...why?</p>
  
  <pre><code>import UIKit
  
  final class Observable&lt;T: Equatable&gt; {
    typealias ObserverHandler = ((T) -&gt; Void)
    typealias ObserverEntry = (owner: AnyObject, didChange: ObserverHandler)
  
    var value: T {
      didSet {
        if self.value == oldValue { return }
        self.observers.forEach({ (entry: ObserverEntry) in entry.didChange(self.value) })
      }
    }
    private var observers: [ObserverEntry] = []
  
    init(_ value: T) {
      self.value = value
    }
  
    func subscribe(observer: AnyObject, didChange block: @escaping ObserverHandler) {
      let entry: ObserverEntry = (owner: observer, didChange: block)
      observers.append(entry)
    }
  
    func unsubscribe(observer: AnyObject) {
      let filteredEntries: [ObserverEntry] = observers.filter({ (entry: ObserverEntry) -&gt; Bool in
        return (entry.owner !== observer)
      })
      self.observers = filteredEntries
    }
  
  }
  
  // [!] Type 'String?' does not conform to protocol 'Equatable'
  var foo: Observable&lt;String?&gt; = Observable(nil)
  </code></pre>