{"id":872,"date":"2021-05-03T23:45:05","date_gmt":"2021-05-03T14:45:05","guid":{"rendered":"https:\/\/blog.enyou.net\/ko\/?p=872"},"modified":"2021-05-03T23:45:16","modified_gmt":"2021-05-03T14:45:16","slug":"enum-codable","status":"publish","type":"post","link":"https:\/\/blog.enyou.net\/ko\/archives\/872","title":{"rendered":"swift enum codable"},"content":{"rendered":"\n<p>enum\uc5d0\uc11c codable\uc744 \ucc44\ud0dd\ud558\uba74 \ubc14\ub85c \uc548 \ub418\uace0, <\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>Type 'FileType' does not conform to protocol 'Decodable'<\/code><\/pre>\n\n\n\n<pre class=\"wp-block-code\"><code>Type 'FileType' does not conform to protocol 'Encodable'<\/code><\/pre>\n\n\n\n<p>\ub728\ub294 \uc0c1\ud669\uc774 \ubc1c\uc0dd\ud55c\ub2e4.<\/p>\n\n\n\n<p>\uc774\uc720\ub294 enum\uc774 rawValue\ub85c String \ub610\ub294 Int\ub97c \ucc44\ud0dd\ud558\uc9c0 \uc54a\uc544\uc11c \uadf8\ub807\ub2e4. (json \ub370\uc774\ud130\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \ub2f9\uc5f0\ud55c \uac83 \uac19\ub2e4.)<\/p>\n\n\n\n<p>\ubcc4\ub3c4\uc758 \uc778\uc790\uac00 \uc5c6\ub294 \uacbd\uc6b0\uc5d0\ub294 \uc544\ub798\uc640 \uac19\uc774 \uc218\ub3d9\uc73c\ub85c(?) \uc778\ucf54\ub529, \ub514\ucf54\ub529\uc744 \ud574\uc8fc\uba74 \ub41c\ub2e4. (\uc0ac\uc2e4 \uadf8\ub0e5, \ubb38\uc81c\uac00 \uc5c6\ub2e4\uba74 rawValue\ub97c \ucc44\ud0dd\ud558\ub294 \uac8c \uc88b\uc544\ubcf4\uc778\ub2e4.)<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>enum FileType {\n    case `default`\n    case directory\n    case link\n}\n\nextension FileType: Codable {\n    enum ErrorType: Error {\n        case encoding\n        case decoding\n    }\n    \n    init(from decoder: Decoder) throws {\n        let value = try decoder.singleValueContainer()\n        let decodedValue = try value.decode(String.self)\n        \n        switch decodedValue {\n        case \"default\":\n            self = .default\n        case \"directory\":\n            self = .directory\n        case \"link\":\n            self = .link\n        default:\n            throw ErrorType.decoding\n        }\n    }\n    \n    func encode(to encoder: Encoder) throws {\n        var contrainer = encoder.singleValueContainer()\n        \n        switch self {\n        case .default:\n            try contrainer.encode(\"default\")\n        case .directory:\n            try contrainer.encode(\"directory\")\n        case .link:\n            try contrainer.encode(\"link\")\n        }\n    }\n}\n\nlet encoder = JSONEncoder()\nlet decoder = JSONDecoder()\n\nlet value = FileType.link\nlet encodedData = try! encoder.encode(value)\nlet decodedValue = try! decoder.decode(FileType.self, from: encodedData)<\/code><\/pre>\n\n\n\n<p>\ub9cc\uc57d enum\uc758 case\uc5d0\uc11c \uc778\uc790\ub97c \ubc1b\uc558\ub2e4\uba74 \uc544\ub798\uc758 stackoverflow\ub97c \ucc38\uc870\ud558\uc5ec codingKey\ub97c \uc774\uc6a9\ud574\uc11c case \ubcc4\ub85c \ubc1b\uc740 \uc778\uc790\ub97c \ucd94\uac00\uc801\uc73c\ub85c \uc778\ucf54\ub529, \ub514\ucf54\ub529\ud574\uc8fc\uba74 \uc88b\uc744 \uac83 \uac19\ub2e4. (container(keyedBy: CodingKey.Protocol) \uc0ac\uc6a9.)<\/p>\n\n\n\n<p><a href=\"https:\/\/stackoverflow.com\/questions\/44580719\/how-do-i-make-an-enum-decodable-in-swift-4\/44582674\">https:\/\/stackoverflow.com\/questions\/44580719\/how-do-i-make-an-enum-decodable-in-swift-4\/44582674<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>enum\uc5d0\uc11c codable\uc744 \ucc44\ud0dd\ud558\uba74 \ubc14\ub85c \uc548 \ub418\uace0, \ub728\ub294 \uc0c1\ud669\uc774 \ubc1c\uc0dd\ud55c\ub2e4. \uc774\uc720\ub294 enum\uc774 rawValue\ub85c String \ub610\ub294 Int\ub97c \ucc44\ud0dd\ud558\uc9c0 \uc54a\uc544\uc11c \uadf8\ub807\ub2e4. (json \ub370\uc774\ud130\ub77c\uace0 \uc0dd\uac01\ud558\uba74 \ub2f9\uc5f0\ud55c \uac83 \uac19\ub2e4.) \ubcc4\ub3c4\uc758 \uc778\uc790\uac00 \uc5c6\ub294 \uacbd\uc6b0\uc5d0\ub294 \uc544\ub798\uc640 \uac19\uc774 \uc218\ub3d9\uc73c\ub85c(?) \uc778\ucf54\ub529, \ub514\ucf54\ub529\uc744 \ud574\uc8fc\uba74 \ub41c\ub2e4. (\uc0ac\uc2e4 \uadf8\ub0e5, \ubb38\uc81c\uac00 \uc5c6\ub2e4\uba74 rawValue\ub97c \ucc44\ud0dd\ud558\ub294 \uac8c \uc88b\uc544\ubcf4\uc778\ub2e4.) \ub9cc\uc57d enum\uc758 case\uc5d0\uc11c \uc778\uc790\ub97c \ubc1b\uc558\ub2e4\uba74 \uc544\ub798\uc758 stackoverflow\ub97c [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[1],"tags":[],"class_list":["post-872","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/872"}],"collection":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/comments?post=872"}],"version-history":[{"count":4,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/872\/revisions"}],"predecessor-version":[{"id":876,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/posts\/872\/revisions\/876"}],"wp:attachment":[{"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/media?parent=872"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/categories?post=872"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.enyou.net\/ko\/wp-json\/wp\/v2\/tags?post=872"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}