enum JSONNullable<T> : Codable { case value(T) case null func encode(to encoder: Encoder) throws { var sc = encoder.singleValueContainer() switch self { case .value(let anyValue): if let encodableValue = anyValue as? Encodable { // sc.encode(encodableValue) // だめ } else { // throw error } case .null: try sc.encodeNil() } } }
case .some(let wrapped): try (wrapped as! Encodable).__encode(to: &container)
SOでヤバそうなコードは見つけたんですけど。enum JSONNullable<T> : Codable { case value(T) case null func encode(to encoder: Encoder) throws { switch self { case .value(let anyValue): if let encodableValue = anyValue as? Encodable { // sc.encode(encodableValue) // だめ try encodableValue.encode(to: encoder) // } else { // throw error } case .null: var sc = encoder.singleValueContainer() try sc.encodeNil() } } }