การจัดการชนิดค่าเสริมและชนิดซ้อนกัน
ถอดรหัสค่าเสริมและโครงสร้างซ้อนกันอย่างปลอดภัย
การจัดการชนิดค่าเสริมและชนิดซ้อนกัน เป็นบทเรียน Swift Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Swift Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
พร็อพเพอร์ตีออปชันนัล
พร็อพเพอร์ตีออปชันนัลจะเป็น Codable ได้โดยธรรมชาติ เมื่อชนิดข้อมูลที่ห่อหุ้มอยู่เป็น Codable คีย์ JSON ที่หายไปจะถูกถอดรหัสเป็น nil ส่วนคีย์ที่มีอยู่จะถูกถอดรหัสตามปกติ
import Foundation
struct User: Codable {
var name: String
var nickname: String?
}
let json = "{\"name\":\"Ada\"}"
let u = try JSONDecoder().decode(User.self, from: json.data(using: .utf8)!)
print(u.name, u.nickname ?? "-")การเข้ารหัสค่าออปชันนัลที่เป็น nil
โดยค่าเริ่มต้น ค่าออปชันนัลที่เป็น nil จะถูกตัดออกจาก JSON ที่เข้ารหัสทั้งหมด ทำให้ข้อมูลที่ส่งมีขนาดเล็กลง
import Foundation
struct User: Codable {
var name: String
var nickname: String?
}
let data = try JSONEncoder().encode(User(name: "Ada", nickname: nil))
print(String(data: data, encoding: .utf8)!)ค่า null ที่ถอดรหัสเป็น nil
หาก JSON มีค่า null อย่างชัดเจนสำหรับพร็อพเพอร์ตีออปชันนัล ค่านั้นจะถูกถอดรหัสเป็น nil แทนที่จะโยนข้อผิดพลาด
import Foundation
struct User: Codable {
var name: String
var age: Int?
}
let json = "{\"name\":\"Ada\",\"age\":null}"
let u = try JSONDecoder().decode(User.self, from: json.data(using: .utf8)!)
print(u.age == nil)โครงสร้าง Codable ที่ซ้อนกัน
คุณสามารถประกอบแบบจำลองด้วยการซ้อนชนิดข้อมูล Codable ชนิดข้อมูลภายนอกจะเข้ารหัสและถอดรหัสชนิดข้อมูลภายในให้โดยอัตโนมัติ
import Foundation
struct Address: Codable { var city: String; var zip: String }
struct Person: Codable { var name: String; var address: Address }
let p = Person(name: "Lee", address: Address(city: "Rome", zip: "00100"))
let data = try JSONEncoder().encode(p)
print(String(data: data, encoding: .utf8)!)การถอดรหัสโครงสร้างที่ซ้อนกัน
การทำงานย้อนกลับก็เช่นกัน ออบเจ็กต์ JSON ที่ซ้อนกันจะถูกถอดรหัสเป็นพร็อพเพอร์ตีของโครงสร้างที่ซ้อนกัน
import Foundation
struct Address: Codable { var city: String }
struct Person: Codable { var name: String; var address: Address }
let json = "{\"name\":\"Lee\",\"address\":{\"city\":\"Rome\"}}"
let p = try JSONDecoder().decode(Person.self, from: json.data(using: .utf8)!)
print(p.address.city)ชนิดข้อมูลที่ซ้อนกันแบบออปชันนัล
โครงสร้างที่ซ้อนกันสามารถเป็นค่าออปชันนัลได้เช่นกัน หากไม่มีคีย์ ค่าที่ซ้อนกันทั้งหมดจะกลายเป็น nil
import Foundation
struct Address: Codable { var city: String }
struct Person: Codable { var name: String; var address: Address? }
let json = "{\"name\":\"Lee\"}"
let p = try JSONDecoder().decode(Person.self, from: json.data(using: .utf8)!)
print(p.address?.city ?? "no address")อาร์เรย์ของ Codable
อาร์เรย์ของชนิดข้อมูลองค์ประกอบที่เป็น Codable จะเป็น Codable ด้วยเช่นกัน และจับคู่โดยตรงกับอาร์เรย์ JSON ของออบเจ็กต์
import Foundation
struct Tag: Codable { var name: String }
struct Post: Codable { var title: String; var tags: [Tag] }
let p = Post(title: "Hi", tags: [Tag(name: "swift"), Tag(name: "json")])
let data = try JSONEncoder().encode(p)
print(String(data: data, encoding: .utf8)!)การถอดรหัสอาร์เรย์ของโครงสร้าง
การถอดรหัสอาร์เรย์ JSON ของออบเจ็กต์จะได้อาร์เรย์ Swift ของค่าที่มีชนิดข้อมูลเฉพาะ ซึ่งคุณสามารถวนดูแต่ละค่าได้
import Foundation
struct Tag: Codable { var name: String }
let json = "[{\"name\":\"a\"},{\"name\":\"b\"}]"
let tags = try JSONDecoder().decode([Tag].self, from: json.data(using: .utf8)!)
for t in tags { print(t.name) }อาร์เรย์ออปชันนัล
อาร์เรย์ออปชันนัลแยกความแตกต่างระหว่าง "ไม่มีคีย์" (nil) กับ "มีคีย์แต่เป็นอาร์เรย์ว่าง" ([]) ได้ ทั้งสองแบบเป็นสถานะที่ถูกต้องและมีความหมาย
import Foundation
struct Box: Codable { var items: [String]? }
let a = try JSONDecoder().decode(Box.self, from: "{}".data(using: .utf8)!)
let b = try JSONDecoder().decode(Box.self, from: "{\"items\":[]}".data(using: .utf8)!)
print(a.items == nil, b.items == [])โครงสร้างที่ซ้อนกันหลายชั้น
การซ้อนกันอาจมีหลายระดับได้ เช่น โครงสร้างภายในอาร์เรย์ภายในโครงสร้าง Codable จะจัดการแต่ละชั้นแบบเรียกซ้ำ
import Foundation
struct Comment: Codable { var text: String }
struct Article: Codable { var title: String; var comments: [Comment] }
struct Feed: Codable { var articles: [Article] }
let feed = Feed(articles: [Article(title: "A", comments: [Comment(text: "hi")])])
let data = try JSONEncoder().encode(feed)
print(String(data: data, encoding: .utf8)!)การแปลงไปกลับด้วยค่าออปชันนัลและการซ้อนกัน
เมื่อนำทุกอย่างมารวมกัน ฟิลด์ออปชันนัล โครงสร้างที่ซ้อนกัน และอาร์เรย์จะยังคงอยู่ครบถ้วนตลอดการเข้ารหัสและถอดรหัสไปกลับ
import Foundation
struct Address: Codable { var city: String }
struct Person: Codable {
var name: String
var address: Address?
var hobbies: [String]
}
let p = Person(name: "Mo", address: Address(city: "Cairo"), hobbies: ["chess"])
let data = try JSONEncoder().encode(p)
let back = try JSONDecoder().decode(Person.self, from: data)
print(back.address?.city ?? "-", back.hobbies.first ?? "-")ตรวจสอบความเข้าใจอย่างรวดเร็ว: ค่าออปชันนัลและการซ้อนกัน
ทดสอบความเข้าใจของคุณเกี่ยวกับชนิดข้อมูล Codable แบบออปชันนัลและแบบซ้อนกัน
ทบทวน: ชนิดข้อมูลออปชันนัลและชนิดข้อมูลที่ซ้อนกัน
คุณได้เรียนรู้วิธีที่ Codable จัดการโครงสร้างข้อมูลที่ซับซ้อนขึ้นดังนี้
- พร็อพเพอร์ตีออปชันนัลรองรับคีย์ที่หายไปและค่า
nullที่ระบุอย่างชัดเจน โดยถอดรหัสเป็นnil - ค่าออปชันนัลที่เป็น
nilจะถูกละเว้นเมื่อเข้ารหัสโดยค่าเริ่มต้น - โครงสร้างและอาร์เรย์
Codableที่ซ้อนกันจะเข้ารหัสและถอดรหัสแบบเรียกซ้ำ - อาร์เรย์ออปชันนัลแยกความแตกต่างระหว่างไม่มีข้อมูล (
nil) กับอาร์เรย์ว่าง ([])
เรียนรู้ Swift ด้วย AI tutor — ฟรี
เขียนและเรียกใช้โค้ดจริงในเบราว์เซอร์ของคุณ รับความช่วยเหลือทันทีจาก AI tutor 24/7 และเรียนรู้ต่อจากที่คุณหยุดบนเว็บหรือในแอป
- คอร์ส
- 122
- บทเรียน
- 409
คำถามที่พบบ่อย
บทเรียน “การจัดการชนิดค่าเสริมและชนิดซ้อนกัน” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การจัดการชนิดค่าเสริมและชนิดซ้อนกัน” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Swift Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Swift Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การจัดการชนิดค่าเสริมและชนิดซ้อนกัน”
ถอดรหัสค่าเสริมและโครงสร้างซ้อนกันอย่างปลอดภัย คุณปฏิบัติ Swift Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Swift Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Swift Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “การจัดการชนิดค่าเสริมและชนิดซ้อนกัน” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Swift Academy นี้ได้ไหม
ได้ บทเรียน Swift Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การทำให้สอดคล้องกับ Codable
- การเข้ารหัสด้วย JSONEncoder
- การถอดรหัสด้วย JSONDecoder
- การจัดการชนิดค่าเสริมและชนิดซ้อนกัน