2017-09-28 6 views
0

私は他の誰かのAPIを使用しています。私はJSONを返しています。このような;Swiftで 'Type'という名前の変数を宣言できますか?

[{"ID": 123, 
"Name": "My Game Api", 
"Type": "Racing", 
"Num": 0, 
"Country": "England" 
}] 

私はこのように、JSONを解析する構造体を定義します。コースのXcode

struct MyResult : Decodable{ 
    var ID : Int? 
    var Name : String? 
    var Type : String? 
    var Num : Int? 
    var Country : String? 
} 
// Using.. 
    let games = try JSONDecoder().decode([MyResult].self, from: data!) 

は私にエラーを与える:それはと競合するので、 型のメンバは、「種類」という名前することはできません'foo.Type'式。

私はAPIを書いていません。 変数のタイプをに変更した場合、値を読み取ることができません。

APIを変更せずにDecodable Structを使用できますか?

+5

によって投稿されたコメントはhttps://stackoverflow.com/q/44396500/2976878比較従うようにしてください。あなたは 'lowerCamelCase'プロパティ名をSwift conventionとして使うべきです。カスタム 'CodingKeys' enumでJSONキーにマッピングします。 – Hamish

+0

https://developer.apple.com/documentation/foundation/archives_and_serialization/encoding_and_decoding_custom_types#2904057 – Slayter

+1

また、関係はありませんが、すべてのプロパティは本当にオプションである必要がありますか? JSONが* any *のキーを含んでいないことは合法ですか? – Hamish

答えて

0

あなたは以下のように使用することができます:

struct MyResult : Decodable { 
    var ID : Int? 
    var Name : String? 
    var type : String? 
    var Num : Int? 
    var Country : String? 

    private enum CodingKeys : String, CodingKey { 
     case ID, Name, type = "Type", Num, Country 
    } 
} 

Hamish

+3

小文字で始まるタイプに名前を付けるのは簡単です。そして、他のプロパティの "Type"と同じようにしてください。 –

+2

btw letを使用してすべての構造体プロパティを定数として宣言し、おそらくそれらのうちのどれもオプションである必要はありません –