我怎么能使用Swift 4的Codable协议默默地忽略未在列表中解码的对象?

时间:2017-11-17 22:50:39

标签: swift swift4 codable

当其中一些对象无法正确解码时,有没有办法解码作为对象列表的JSON?假设我有一个enum,其中包含两个可能的值foobar,但所有突然后端都会开始为该字段返回另一个可能的选项(假设为other)。< / p>

看下面的例子,第一部分没问题。我想要的是在第二部分中包含一个包含1个元素(foo)的列表,而不是nil

import Foundation

enum Value: String, Codable {
    case foo
    case bar
}

struct Object: Codable {
    let value: Value
}

let dataList = "[{\"value\":\"foo\"}, {\"value\":\"bar\"}]".data(using: .utf8)!
let objectList = try? JSONDecoder().decode([Object].self, from: dataList) // [{foo}, {bar}]

let anotherDataList = "[{\"value\":\"foo\"}, {\"value\":\"other\"}]".data(using: .utf8)!
let anotherObjectList = try? JSONDecoder().decode([Object].self, from: anotherDataList) // nil

// is there a way to have this ^ as [{foo}] instead of nil?

0 个答案:

没有答案