1. ホーム
  2. スイフト

[解決済み】swift 4でenumをDecodableにするにはどうすればいいですか?

2022-04-06 19:05:20

質問

enum PostType: Decodable {

    init(from decoder: Decoder) throws {

        // What do i put here?
    }

    case Image
    enum CodingKeys: String, CodingKey {
        case image
    }
}

これを完成させるにはどうしたらいいのでしょうか? また case をこうしてください。

case image(value: Int)

Decodableに準拠させるには?

エディット 以下は、私の完全なコードです(これは動作しません)。

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はどのように処理されるのでしょうか?

enum PostType: Decodable {
    case count(number: Int)
}

解決方法は?

とても簡単です。 String または Int 暗黙のうちに割り当てられる生の値。

enum PostType: Int, Codable {
    case image, blob
}

image がエンコードされて 0blob から 1

または

enum PostType: String, Codable {
    case image, blob
}

image がエンコードされて "image"blob から "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)
}