การทำให้สอดคล้องกับ Codable
ทำให้ชนิดเข้ารหัสและถอดรหัสได้โดยอัตโนมัติ
การทำให้สอดคล้องกับ Codable เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน 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 จะกลายเป็น Codable โดยอัตโนมัติ และจะถูกเข้ารหัสเป็นค่าดิบของตัวเองใน JSON
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สร้างค่ากลับขึ้นมา- ชนิดข้อมูลมาตรฐาน ชนิดแจกแจงที่มีค่าดิบ และชนิดข้อมูล
Codableที่ซ้อนกัน ล้วนรองรับทั้งหมด
คำถามที่พบบ่อย
บทเรียน “การทำให้สอดคล้องกับ Codable” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การทำให้สอดคล้องกับ Codable” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การทำให้สอดคล้องกับ Codable”
ทำให้ชนิดเข้ารหัสและถอดรหัสได้โดยอัตโนมัติ คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 1 จากทั้งหมด 4 บทเรียน
บทเรียน “การทำให้สอดคล้องกับ Codable” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำให้สอดคล้องกับ Codable
- การเข้ารหัสด้วย JSONEncoder
- การถอดรหัสด้วย JSONDecoder
- การจัดการชนิดค่าเสริมและชนิดซ้อนกัน