Swift Academy · Les

Omgaan met optionals en geneste typen

Decodeer optionals en geneste structuren veilig.

Les 4 van 413 stappen

Omgaan met optionals en geneste typen is een gratis Swift Academy-les op CoddyKit. Dit is les 4 van 4. Je kunt 3 lessen uit dit leerpad gratis volledig lezen — daarna ontgrendelt CoddyKit PRO alle lessen, plus praktische oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. Deze les maakt deel uit van het leertraject Swift Academy. Je voortgang wordt gesynchroniseerd op het web en in de CoddyKit-app. De cursus Swift Academy bevat in totaal 4 lessen.

Optionele eigenschappen

Een optionele eigenschap is vanzelf Codable wanneer het ingesloten type dat ook is. Een ontbrekende JSON-sleutel wordt naar nil gedecodeerd; een aanwezige sleutel wordt normaal gedecodeerd.

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 ?? "-")

Optionele waarden met nil coderen

Standaard wordt een optionele waarde met nil volledig uit de gecodeerde JSON weggelaten, waardoor de gegevens kleiner blijven.

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)!)

Expliciete null wordt naar nil gedecodeerd

Als de JSON een expliciete null bevat voor een optionele eigenschap, wordt die naar nil gedecodeerd in plaats van een fout te veroorzaken.

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)

Geneste Codable-structs

Stel modellen samen door Codable-typen te nesten. Het buitenste type codeert en decodeert het binnenste type automatisch.

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)!)

Geneste structs decoderen

Het omgekeerde werkt ook: geneste JSON-objecten worden naar de eigenschappen van de geneste struct gedecodeerd.

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)

Optionele geneste typen

Een geneste struct kan zelf optioneel zijn. Als de sleutel ontbreekt, wordt de volledige geneste waarde 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")

Arrays met Codable

Een array waarvan het elementtype Codable is, is zelf ook Codable. De array wordt rechtstreeks gekoppeld aan een JSON-array met objecten.

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)!)

Arrays met structs decoderen

Het decoderen van een JSON-array met objecten levert een Swift-array met getypeerde waarden op waar je overheen kunt itereren.

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) }

Optionele arrays

Een optionele array maakt onderscheid tussen 'sleutel ontbreekt' (nil) en 'aanwezig maar leeg' ([]). Beide zijn geldige en betekenisvolle toestanden.

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 == [])

Diep geneste structuren

Nesting kan meerdere niveaus diep gaan — structs in arrays in structs. Codable verwerkt elke laag recursief.

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)!)

Heen en terug met optionele waarden en nesting

Als je alles combineert, blijven optionele velden, geneste structs en arrays intact tijdens een volledige heen-en-terugbewerking van coderen en decoderen.

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 ?? "-")

Korte controle: optionele waarden en nesting

Test of je optionele en geneste Codable-typen begrijpt.

Samenvatting: optionele en geneste typen

Je hebt geleerd hoe Codable omgaat met complexere structuren:

  • Optionele eigenschappen verdragen ontbrekende sleutels en expliciete null en worden naar nil gedecodeerd.
  • Optionele waarden met nil worden standaard weggelaten bij het coderen.
  • Geneste Codable-structs en arrays worden recursief gecodeerd en gedecodeerd.
  • Optionele arrays maken onderscheid tussen ontbrekend (nil) en leeg ([]).
Gratis beginnen

Leer Swift met een AI-tutor — gratis

Schrijf echte code en voer die uit in je browser, krijg direct hulp van een AI-tutor die 24/7 beschikbaar is en ga verder waar je gebleven bent op het web of in de app.

Cursussen
122
Lessen
409

Veelgestelde vragen

Is de les “Omgaan met optionals en geneste typen” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Omgaan met optionals en geneste typen”, gratis volledig lezen. Daarna ontgrendelt CoddyKit PRO alle lessen, plus interactieve oefeningen met een ingebouwde code-editor en een AI-tutor die 24/7 beschikbaar is. De cursus Swift Academy bevat in totaal 4 lessen.

Wat leer ik in “Omgaan met optionals en geneste typen”?

Decodeer optionals en geneste structuren veilig. Je oefent met Swift Academy door code rechtstreeks in de browser uit te voeren. Een AI-begeleider die 24/7 beschikbaar is beantwoordt je vragen terwijl je de les doorwerkt.

Heb ik ervaring nodig om met Swift Academy te beginnen?

Ervaring vooraf is niet nodig. Swift Academy op CoddyKit is opgebouwd voor beginners tot gevorderden, zodat je hier of bij het begin kunt starten en in je eigen tempo kunt leren. Dit is les 4 van 4.

Hoe lang duurt de les “Omgaan met optionals en geneste typen”?

De meeste lessen van CoddyKit duren ongeveer 5–10 minuten. Elke les is kort en interactief, zodat je gestaag vooruitgaat en op het web en in de app precies verdergaat waar je was gebleven.

Kan ik code schrijven en uitvoeren in deze les over Swift Academy?

Ja. Elke les over Swift Academy bevat een ingebouwde code-editor, zodat je rechtstreeks in je browser echte code kunt schrijven en uitvoeren en direct feedback van AI krijgt — lokale installatie is niet nodig.

Alle lessen in deze cursus

  1. Conformeren aan Codable
  2. Coderen met JSONEncoder
  3. Decoderen met JSONDecoder
  4. Omgaan met optionals en geneste typen
← Terug naar Swift Academy