Codableへの適合
型を自動的にエンコード可能・デコード可能にします。
「Codableへの適合」はCoddyKit上の無料Swift Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはSwift Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Swift Academyコースには全4レッスンが含まれています。
Codableとは
CodableはEncodable & Decodableの型エイリアスです。型をこれに適合させると、SwiftはインスタンスをJSONなどの外部データに変換し、再びインスタンスとして復元できます。手動でパースするコードは必要ありません。
import Foundation
struct Book: Codable {
var title: String
var pages: Int
}
print("Book conforms to Codable")自動合成
保存されているすべてのプロパティ自体が Codable であれば、コンパイラーがエンコードとデコードの処理を自動的に合成します。プロパティの一覧を書くことだけが必要で、残りは Swift が処理します。
import Foundation
struct User: Codable {
var name: String
var age: Int
var isActive: Bool
}
let u = User(name: "Ada", age: 36, isActive: true)
print(u)JSONデータへのエンコード
Codable な値は JSONEncoder に渡すことができ、Data のデータを生成します。その Data を String に変換すると、JSONテキストを確認できます。
import Foundation
struct User: Codable {
var name: String
var age: Int
}
let u = User(name: "Ada", age: 36)
let data = try JSONEncoder().encode(u)
print(String(data: data, encoding: .utf8)!)JSONデータからのデコード
逆の処理には JSONDecoder を使います。対象の型と生の Data を渡すと、完全に型付けされた Swift の値を再構築します。
import Foundation
struct User: Codable {
var name: String
var age: Int
}
let json = "{\"name\":\"Ada\",\"age\":36}"
let data = json.data(using: .utf8)!
let u = try JSONDecoder().decode(User.self, from: data)
print(u.name, u.age)値のラウンドトリップ
エンコードしてからデコードすると、元の値と等しい値が返されるはずです。このラウンドトリップは、型の Codable 適合が期待どおりに機能することをすばやく確認する方法です。
import Foundation
struct Point: Codable {
var x: Int
var y: Int
}
let p = Point(x: 3, y: 7)
let data = try JSONEncoder().encode(p)
let back = try JSONDecoder().decode(Point.self, from: data)
print(back.x, back.y)Encodable のみ
片方だけに適合させることもできます。Encodable は、型を出力できますが読み戻すことはできないという意味です。解析する必要のないレスポンスモデルに便利です。
import Foundation
struct Receipt: Encodable {
var item: String
var total: Double
}
let r = Receipt(item: "Coffee", total: 4.5)
let data = try JSONEncoder().encode(r)
print(String(data: data, encoding: .utf8)!)Decodable のみ
同様に、Decodable を使うと、エンコードせずに外部データから型を構築できます。読み取り専用のAPIペイロードを受け取るだけの場合に便利です。
import Foundation
struct Config: Decodable {
var version: Int
var debug: Bool
}
let json = "{\"version\":2,\"debug\":true}"
let data = json.data(using: .utf8)!
let c = try JSONDecoder().decode(Config.self, from: data)
print(c.version, c.debug)サポートされるプロパティの型
String、Int、Double、Bool、Date、Data、URL などの標準ライブラリの型に加え、Codable な要素の配列や辞書は、すべて標準で Codable です。
import Foundation
struct Profile: Codable {
var name: String
var tags: [String]
var scores: [String: Int]
}
let p = Profile(name: "Sam", tags: ["a", "b"], scores: ["math": 90])
let data = try JSONEncoder().encode(p)
print(String(data: data, encoding: .utf8)!)列挙型も適合できます
String や Int などのraw valueを持つ列挙型は、自動的に Codable になります。JSONではraw valueとしてエンコードされます。
import Foundation
enum Status: String, Codable {
case active, paused, done
}
struct Task: Codable {
var title: String
var status: Status
}
let t = Task(title: "Ship", status: .active)
let data = try JSONEncoder().encode(t)
print(String(data: data, encoding: .utf8)!)プロパティは Codable である必要があります
合成が機能するのは、保存されている すべての プロパティが Codable の場合だけです。カスタム型をプロパティに使う場合は、その型も適合させる必要があります。そうしないと、コンパイラーは合成を拒否します。
import Foundation
struct Address: Codable {
var city: String
}
struct Person: Codable {
var name: String
var address: Address
}
let p = Person(name: "Lee", address: Address(city: "Rome"))
print(try JSONEncoder().encode(p).count, "bytes")Codable が重要な理由
Codable を使うと、手作業で書くシリアライズの定型コードが不要になり、型を唯一の信頼できる情報源として保ち、コンパイル時に不一致を検出できます。Swiftアプリと外部データの間でデータをやり取りする標準的な方法です。
import Foundation
struct Settings: Codable {
var theme: String
var fontSize: Int
}
let s = Settings(theme: "dark", fontSize: 14)
let data = try JSONEncoder().encode(s)
let back = try JSONDecoder().decode(Settings.self, from: data)
print(back.theme, back.fontSize)クイックチェック: Codable への適合
適合について学んだ内容を確認します。
まとめ: Codable への適合
Swiftにおけるシリアライズの基礎を学びました。
Codable=Encodable & Decodableです。- すべてのプロパティが
Codableであれば、適合が合成されます。 JSONEncoderはDataを生成し、JSONDecoderは値を再構築します。- 標準型、raw valueを持つ列挙型、ネストされた
Codable型がすべてサポートされます。
よくある質問
「Codableへの適合」レッスンは無料ですか?
はい。「Codableへの適合」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Swift Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Swift Academyコースには全4レッスンが含まれています。
「Codableへの適合」で何を学びますか?
型を自動的にエンコード可能・デコード可能にします。 ブラウザで直接実行するハンズオンコードでSwift Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Swift Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのSwift Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「Codableへの適合」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このSwift Academyレッスンでコードを書いて実行できますか?
はい。すべてのSwift Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。