Omgaan met optionals en geneste typen
Decodeer optionals en geneste structuren veilig.
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
nullen worden naarnilgedecodeerd. - Optionele waarden met
nilworden standaard weggelaten bij het coderen. - Geneste
Codable-structs en arrays worden recursief gecodeerd en gedecodeerd. - Optionele arrays maken onderscheid tussen ontbrekend (
nil) en leeg ([]).
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
- Conformeren aan Codable
- Coderen met JSONEncoder
- Decoderen met JSONDecoder
- Omgaan met optionals en geneste typen