我有一个简单的结构,我需要设置一个标志枚举解码失败。不确定现在这样做。
struct TestStruct: Codable {
let testEnum: TestEnum
let failDecode: Bool
}
extension TestStruct {
enum TestEnum: String, Codable {
case val1 = "VAL1"
case val2 = "VAL2"
public init(from decoder: Decoder) throws {
let testState = try decoder.singleValueContainer().decode(String.self)
switch testState{
case "VAL1": self = .val1
case "VAL2": self = .val2
default: TestStruct.failDecode = true // fail compile here
}
}
}
}
如何在解码失败时设置failDecode标志?
1条答案
按热度按时间eyh26e7m1#
对于
TestStruct
,需要自定义init(from:)
初始值设定项。对于TestEnum
,不需要自定义init(from:)
初始值设定项。如果你想要
Codable
一致性,而不仅仅是Decodable
一致性,那么你还需要提供一个匹配的encode(to:)
方法。(Note
Codable
是Decodable & Encodable
的别名,因此提供单独的Decodable
和Encodable
一致性与提供单个Codable
一致性相同。我忽略了
encode(to:)
实现中的failDecode
标志,但是如果设置了failDecode
,您可能希望编码一个非法值,这个版本在failDecode
为真时编码nil: