title: What are the fundamental differences between set and didSet?
body: <p>I understand that one is a setter and the other is a property observer. My question is how do they differ in behavior and when would you use one over the other. Don't they do pretty much the same thing? For example:</p>
  
  <pre><code>var foo: String {
   set {
     run code when set
   }
  }
  
  var foo: String {
   didSet {
    run code when set
   }
  }
  </code></pre>