Help us understand the problem. What is going on with this article?

CodableでdecodeしたときにJSON側のパラメータが足りなくても落ちないようにする

追記-----------------------------
そもそもこんな面倒なことしなくても、

var path: String? = ""

にすれば落ちなくなるそうです。ご指摘ありがとうございます!
追記ここまで------------------------

何言ってるかよくわからないかもしれませんが。
自分で何やってるかもよくわかってないのでなんとなく書きます。

Codableを使ってJSONをデコードするときってこんなふうに書きますよね。↓

struct BoardStruct: Codable {
    var name: String = ""
    var path: String = ""
}

func() {
    let boardStruct = try! JSONDecoder().decode(BoardStruct.self, from: data)
}

でも、これだとJSONに指定のパラメータ、例えばpathがJSONに入ってこないとき、try!で落ちてしまうのです。
で、それを回避するためにやったこと。
structを以下のように書き換える。

struct BoardStruct: Codable {
    var name: String = ""
    var path: String = ""

    enum CodingKeys: String, CodingKey {
        case name
        case path
    }

    init(name: String, path: String) {
        self.name = name
        self.path = path
    }

    init(from decoder: Decoder) throws {
        let root = try decoder.container(keyedBy: CodingKeys.self)
        self.name = try root.decode(String.self, forKey: .name)
        // ↓ここでpathが入って来なくても落ちないようにする
        if let path = try? root.decode(String.self, forKey: .path) {
            self.path = path
        }
    }
}

以上です。
dcoderのinitを書くとデフォルトのinit(?)がなくなってしまうっぽいので自分で書き足しました。

akira581
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away