追記-----------------------------
そもそもこんな面倒なことしなくても、
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(?)がなくなってしまうっぽいので自分で書き足しました。