title: With JSONDecoder in Swift 4, can missing keys use a default value instead of having to be optional properties?
body: <p>Swift 4 added the new <code>Codable</code> protocol. When I use <code>JSONDecoder</code> it seems to require all the non-optional properties of my <code>Codable</code> class to have keys in the JSON or it throws an error.</p>
  
  <p>Making every property of my class optional seems like an unnecessary hassle since what I really want is to use the value in the json or a default value. (I don't want the property to be nil.)</p>
  
  <p>Is there a way to do this?</p>
  
  <pre><code>class MyCodable: Codable {
      var name: String = "Default Appleseed"
  }
  
  func load(input: String) {
      do {
          if let data = input.data(using: .utf8) {
              let result = try JSONDecoder().decode(MyCodable.self, from: data)
              print("name: \(result.name)")
          }
      } catch  {
          print("error: \(error)")
          // `Error message: "Key not found when expecting non-optional type
          // String for coding key \"name\""`
      }
  }
  
  let goodInput = "{\"name\": \"Jonny Appleseed\" }"
  let badInput = "{}"
  load(input: goodInput) // works, `name` is Jonny Applessed
  load(input: badInput) // breaks, `name` required since property is non-optional
  </code></pre>