enum PostType: Decodable { init(from decoder: Decoder) throws { // What do i put here? } case Image enum CodingKeys: String, CodingKey { case image } }
我要做什么才能完成此任务?另外,可以说我将其更改case为:
case
case image(value: Int)
我该如何使它符合Decodable?
EDit 这是我的完整代码(不起作用)
let jsonData = """ { "count": 4 } """.data(using: .utf8)! do { let decoder = JSONDecoder() let response = try decoder.decode(PostType.self, from: jsonData) print(response) } catch { print(error) } } } enum PostType: Int, Codable { case count = 4 }
最终编辑 另外,它将如何处理这样的枚举?
enum PostType: Decodable { case count(number: Int) }
这很简单,只需使用String或Int隐式分配的原始值即可。
String
Int
enum PostType: Int, Codable { case image, blob }
image被编码到0并blob到1
image
0
blob
1
要么
enum PostType: String, Codable { case image, blob }
image被编码到"image"并blob到"blob"
"image"
"blob"
这是一个简单的示例如何使用它:
enum PostType : Int, Codable { case count = 4 } struct Post : Codable { var type : PostType } let jsonString = "{\"type\": 4}" let jsonData = Data(jsonString.utf8) do { let decoded = try JSONDecoder().decode(Post.self, from: jsonData) print("decoded:", decoded.type) } catch { print(error) }