web-dev-qa-db-ja.com

Swift 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?
   }
}
11
swift nub

いくつかのミスやタイプミスのために、コードがコンパイルされません。

Int writeの配列をデコードするには

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を推測できるためです。

26
vadian

ジョシュア・ノッツィのヒントをありがとう。 Intの配列をデコードするために実装する方法は次のとおりです。

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

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

5
denkeni

または、汎用的に実行できます。

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