2017-07-01 1 views
3

ここに私のコードです。しかし、私は値を設定するか分からない。実際の構造はこの例よりもわずかに複雑であるため、手動で行う必要があります。迅速に配列を手動でデコードする方法4 Codable?

お願いします。

struct Something: Decodable { 
    value: [Int] 

    enum CodingKeys: String, CodingKeys { 
     case value 
    } 

    init (from decoder :Decoder) { 
     let container = try decoder.container(keyedBy: CodingKeys.self) 
     value = ??? // < --- what do i put here? 
    } 
} 

答えて

10

誤字/誤植のためにコードがコンパイルされません。 Int書き込み

struct Something: Decodable { 
    var value: [Int] 

    enum CodingKeys: String, CodingKey { 
     case value 
    } 

    init (from decoder :Decoder) throws { 
     let container = try decoder.container(keyedBy: CodingKeys.self) 
     value = try container.decode([Int].self, forKey: .value) 
    } 
} 

しかし、問題のサンプルコードは、それが初期化するので

struct Something: Decodable { 
    let value: [Int] 
} 

に低減することができ、全体の構造体を表す場合のアレイをデコードするために

CodingKeysを推測することができる。

+2

ありがとう。私は '[Int.self]'を試みていた。 '自分自身が外部になければならなかったことを理解していませんでした –

+2

' Array.self'と 'Array .self'(例えば' [Int] .self')を指定するだけで '値の宣言された型。 –

0

Joshua Nozziのヒントありがとうございます。 Intの配列をデコードする実装方法は次のとおりです。

let decoder = JSONDecoder() 
let intArray = try? decoder.decode([Int].self, from: data) 

手動でデコードすることなく。

関連する問題