Comment puis-je personnaliser les touches avec Swift 4 Décodable protocole?

Swift 4 introduit la prise en charge native de codage et décodage JSON via le Décodable protocole. Comment puis-je personnaliser les touches pour cela?

E. g., dire que j'ai un struct

struct Address:Codable {
    var street:String
    var zip:String
    var city:String
    var state:String
}

Je peux encoder ce JSON.

let address = Address(street: "Apple Bay Street", zip: "94608", city: "Emeryville", state: "California")

if let encoded = try? encoder.encode(address) {
    if let json = String(data: encoded, encoding: .utf8) {
        //Print JSON String
        print(json)

        //JSON string is 
           { "state":"California", 
             "street":"Apple Bay Street", 
             "zip":"94608", 
             "city":"Emeryville" 
           }
    }
}

Je peux encoder ce retour à un objet.

    let newAddress: Address = try decoder.decode(Address.self, from: encoded)

Mais Si j'avais un objet json qui a été

{ 
   "state":"California", 
   "street":"Apple Bay Street", 
   "zip_code":"94608", 
   "city":"Emeryville" 
}

Comment pourrais-je dire le décodeur sur Address que zip_code cartes à zip? Je crois que vous utilisez le nouveau CodingKey protocole, mais je ne peux pas comprendre comment les utiliser.