Menangani Tipe Opsional dan Bersarang
Dekodekan nilai opsional dan struktur bersarang dengan aman.
Menangani Tipe Opsional dan Bersarang adalah pelajaran Swift Academy gratis di CoddyKit. Ini adalah pelajaran 4 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Swift Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Swift Academy mencakup 4 pelajaran total.
Properti Opsional
Properti opsional secara alami bersifat Codable jika jenis yang dibungkusnya juga demikian. Kunci JSON yang tidak ada didekode menjadi nil; kunci yang ada didekode secara normal.
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 ?? "-")Mengodekan Nilai Opsional nil
Secara bawaan, nilai opsional nil tidak disertakan sama sekali dalam JSON yang dienkode, sehingga menghasilkan muatan data yang lebih kecil.
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 Eksplisit Didekode Menjadi nil
Jika JSON berisi null eksplisit untuk properti opsional, nilainya didekode menjadi nil dan tidak melempar kesalahan.
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)Struktur Codable Bertingkat
Susun model dengan menempatkan jenis Codable di dalam jenis lainnya. Jenis luar akan mengodekan dan mendekode jenis di dalamnya secara otomatis.
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)!)Mendekode Struktur Bertingkat
Hal sebaliknya juga berlaku: objek JSON bertingkat didekode menjadi properti struktur bertingkat.
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)Jenis Bertingkat Opsional
Struktur bertingkat juga dapat bersifat opsional. Jika kuncinya tidak ada, seluruh nilai bertingkat tersebut menjadi 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")Array Berisi Codable
Array yang elemennya berjenis Codable juga bersifat Codable. Array tersebut dipetakan langsung menjadi array JSON yang berisi objek.
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)!)Mendekode Array Struktur
Mendekode array JSON yang berisi objek menghasilkan array Swift berisi nilai bertipe yang dapat Anda iterasi.
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) }Array Opsional
Array opsional membedakan "kunci tidak ada" (nil) dari "ada tetapi kosong" ([]). Keduanya merupakan keadaan yang valid dan bermakna.
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 == [])Struktur yang Sangat Bertingkat
Pembentukan tingkat dapat berlangsung hingga beberapa tingkat—struktur di dalam array di dalam struktur. Codable menangani setiap lapisan secara rekursif.
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)!)Putar Balik dengan Nilai Opsional dan Struktur Bertingkat
Jika semuanya digabungkan, bidang opsional, struktur bertingkat, dan array tetap utuh setelah putar balik pengodean dan dekode secara lengkap.
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 ?? "-")Pemeriksaan Cepat: Nilai Opsional dan Struktur Bertingkat
Uji pemahaman Anda tentang jenis Codable yang opsional dan bertingkat.
Ringkasan: Jenis Opsional dan Bertingkat
Anda telah mempelajari cara Codable menangani bentuk data yang lebih kaya:
- Properti opsional dapat menangani kunci yang tidak ada dan
nulleksplisit, lalu mendekodenya menjadinil. - Nilai opsional
nildihilangkan saat pengodean secara bawaan. - Struktur dan array
Codablebertingkat dienkode dan didekode secara rekursif. - Array opsional membedakan keadaan tidak ada (
nil) dari kosong ([]).
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Menangani Tipe Opsional dan Bersarang” gratis?
Ya — teks lengkap “Menangani Tipe Opsional dan Bersarang” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Swift Academy, upgrade ke CoddyKit PRO. Kursus Swift Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Menangani Tipe Opsional dan Bersarang”?
Dekodekan nilai opsional dan struktur bersarang dengan aman. Kamu berlatih Swift Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Swift Academy?
Tidak diperlukan pengalaman sebelumnya. Swift Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 4 dari 4.
Berapa lama pelajaran “Menangani Tipe Opsional dan Bersarang” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Swift Academy ini?
Ya. Setiap pelajaran Swift Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Kesesuaian dengan Codable
- Pengodean dengan JSONEncoder
- Pendekodean dengan JSONDecoder
- Menangani Tipe Opsional dan Bersarang