怎么做 - 从Codable结构中捕获init(来自解码器:Decoder)的错误?

Ton*_*Lin 2 optional ios swift swift4 codable

let jsonString = """
                    {
                        "name":1,
                        "gender":"male",
                    }
                    """

struct Person: Codable {
    var name: String
    var gender: String

    public init(from decoder: Decoder) throws {
        do {
            let container = try decoder.container(keyedBy: CodingKeys.self)
            name = try container.decode(String.self, forKey: .name)
            gender = try container.decode(String.self, forKey: .gender)
        } catch {
            print("XXXXXX \(error)")
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

从上面的代码,它不会编译,因为它抱怨,

从初始化程序返回而不初始化所有存储的属性.

我想抛出一些错误,但如果没有,我该怎么办呢

  1. 为每个属性创建默认值.
  2. 使它们都是可选的.

Tyl*_*ler 6

您不需要输入do-catch,init(from decoder: Decoder)因为它已标记为throws.所以这样做:

public init(from decoder: Decoder) throws {
    let container = try decoder.container(keyedBy: CodingKeys.self)
    name = try container.decode(String.self, forKey: .name)
    gender = try container.decode(String.self, forKey: .gender)
}
Run Code Online (Sandbox Code Playgroud)