0Pricing
Swift Academy · บทเรียน

การทำให้สอดคล้องกับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. การทำให้สอดคล้องกับ Codable
  2. การเข้ารหัสด้วย JSONEncoder
  3. การถอดรหัสด้วย JSONDecoder
  4. การจัดการชนิดค่าเสริมและชนิดซ้อนกัน
← กลับไปที่ Swift Academy