Woordenlijst
Een overzicht van veelgebruikte Swift en SwiftUI begrippen, uitgelegd in het Nederlands.
@Bindable
Maakt het mogelijk om een @Observable-object via een Binding door te geven aan views die twee-weg bewerkingen nodig hebben, zoals een TextField of Picker.
@Bindable var manager: EnergyDataManager
TextField("Naam", text: $manager.naam)@Environment
Geeft een view toegang tot een object dat hoger in de view-boom is aangemaakt, zonder dat je het steeds zelf moet doorgeven.
@Environment(EnergyDataManager.self) var manager@MainActor
Zorgt dat code altijd op de hoofdthread (main thread) wordt uitgevoerd. Nodig voor alle UI-updates.
@MainActor
@Observable
class EnergyDataManager { }@Observable
Markeert een klasse zodat SwiftUI automatisch de interface vernieuwt als een eigenschap verandert.
@Observable
class Teller {
var aantal = 0
}@State
Slaat een waarde op binnen een view. Als de waarde verandert, tekent SwiftUI de view opnieuw.
@State private var naam = "wereld"App Group
Gedeelde opslagruimte tussen de app en een widget (of andere extensions). Beide gebruiken dezelfde suiteName om data uit te wisselen via UserDefaults.
UserDefaults(suiteName: "group.bnelissen.EnergyClock")App Sandbox
Een beveiligde omgeving die verhindert dat een app buiten zijn eigen bestanden kan. Verplicht voor de Mac App Store. Entitlements vormen uitzonderingen op deze sandbox.
Archive
Een definitieve, gesigneerde versie van je app klaar voor distributie. Gemaakt via Product > Archive in Xcode. Wordt geüpload naar App Store Connect.
async / await
Voert code uit die even moet wachten (bijvoorbeeld een netwerkaanroep) zonder de rest van de app te blokkeren.
func haalDataOp() async {
let data = await laadVanServer()
}Binding
Een twee-weg verbinding naar een waarde. Een view kan de waarde lezen én wijzigen. Aangemaakt met het $-teken voor een @State- of @Bindable-eigenschap.
TextField("Naam", text: $naam)Bool
Een waarde die alleen true (waar) of false (niet waar) kan zijn. Vernoemd naar de wiskundige George Boole (1815–1864), die de logica van waar en niet-waar als wiskundig systeem beschreef.
var isKlaar: Bool = true
var heeftGewonnen = falseBreakpoint
Een markering in de code die Xcode vertelt om daar te pauzeren tijdens het draaien van de app. Klik op een regelnummer in Xcode om er een te plaatsen.
Bundle ID
De unieke identifier van je app in het Apple-ecosysteem, in omgekeerde domeinnaam-notatie.
nl.jouwnaam.energyclock
camelCase
Een schrijfwijze voor namen zonder spaties: het eerste woord begint met een kleine letter, elk volgend woord begint met een hoofdletter. Zo wordt “maximale score” maximaleScore. De naam komt van de kameel — de hoofdletters in het midden zijn de bulten. Swift gebruikt camelCase voor variabelen, constanten en functies.
Canvas
Een view waarmee je zelf kunt tekenen: lijnen, cirkels, tekst — alles wat je wilt.
Canvas { context, size in
context.fill(Circle().path(in: CGRect(origin: .zero, size: size)), with: .color(.blue))
}Commentaar
Tekst in de code die Swift negeert. Je schrijft het voor jezelf of voor anderen die de code lezen. Swift kent drie soorten:
| Soort | Gebruik |
|---|---|
// |
Alles op de regel na de twee schuine strepen |
/* ... */ |
Alles tussen de tekens, ook over meerdere regels |
/// |
Documentatiecommentaar voor functies en types (gebruikt Xcode voor ingebouwde hulp) |
In dit boek gebruiken we // Uitvoer: ... om te laten zien wat je op het scherm verwacht te zien.
// Dit is een commentaarregel
var naam = "Pim" // je kunt commentaar ook achter code zetten
/*
Dit commentaar
loopt over meerdere regels.
*/class
Een referentietype dat, net als een struct, eigenschappen en methoden heeft — maar je kunt het doorgeven door te verwijzen. Twee variabelen kunnen naar hetzelfde object wijzen.
class Klok {
var uur = 0
}Compileren
Het omzetten van Swift-code naar een taal die de processor van je Mac begrijpt. Xcode doet dit automatisch als je op de play-knop drukt. Tijdens het compileren controleert Swift ook of alle types kloppen — fouten die dan gevonden worden heten compile-time errors.
Codable
Een protocol dat aangeeft dat een type omgezet kan worden van en naar JSON (of andere formaten). Combineert Encodable en Decodable.
struct Prijs: Codable {
var uur: Int
var bedrag: Double
}Color
Vertegenwoordigt een kleur in SwiftUI.
Color.green
Color(.red)
Color(red: 0.2, green: 0.5, blue: 0.8)CommandGroup
Voegt menu-items toe aan het macOS-applicatiemenu op een specifieke plek.
CommandGroup(after: .windowArrangement) {
Button("Open venster") { openWindow(id: "info") }
}do / try / catch
Structuur om fouten op te vangen. try markeert aanroepen die kunnen mislukken, catch vangt de fout op.
do {
let data = try laadBestand()
} catch {
print("Fout: \(error)")
}Double
Een getal met decimalen. De naam staat voor double precision (dubbele precisie): Swift slaat het getal op met meer nauwkeurigheid dan een gewoon getal.
var temperatuur: Double = 36.6
var prijs = 2.49enum
Een type met een vaste lijst van mogelijke waarden.
enum Kleur {
case groen
case geel
case rood
}Entitlement
Een toestemming die aangeeft wat een macOS-app mag doen buiten zijn sandbox (netwerk, App Groups, push-notificaties).
ForEach
Herhaalt een view voor elk item in een lijst.
ForEach(uren, id: \.self) { uur in
Text("\(uur):00")
}Form
Een container voor invoerelementen zoals TextField, Picker, Toggle en Stepper. In macOS maakt het automatisch geschikte opmaak aan.
Form {
Section("Weergave") {
Toggle("Donkere modus", isOn: $donker)
}
}func
Definieert een functie: een blok code met een naam dat je steeds opnieuw kunt aanroepen.
func groet(naam: String) -> String {
return "Hallo, \(naam)!"
}Gatekeeper
macOS-beveiligingssysteem dat controleert of een app is ondertekend door een bekende ontwikkelaar voordat hij wordt geopend.
Identifiable
Een protocol dat aangeeft dat elk element in een lijst een unieke id heeft, zodat SwiftUI weet welk item welk is.
struct Prijs: Identifiable {
let id = UUID()
var bedrag: Double
}IDE
Een Integrated Development Environment — een programma dat alles wat je nodig hebt om software te schrijven op één plek samenbrengt: een code-editor, een manier om je app te starten en testen, en hulp bij het opsporen van fouten. In dit boek is Xcode de IDE.
Int
Een heel getal zonder decimalen. Afkorting van het Latijnse integer, dat “heel” of “ongedeeld” betekent.
var leeftijd: Int = 9
var score = 42ImageRenderer
Zet een SwiftUI-view om naar een afbeelding (NSImage of UIImage). Handig voor het exporteren van het app-icoon.
let renderer = ImageRenderer(content: AppIconView())
renderer.scale = 2.0
let afbeelding = renderer.nsImageJSONDecoder
Zet JSON-data om naar Swift-structs of -klassen die Decodable zijn.
let prijs = try JSONDecoder().decode(Prijs.self, from: jsonData)JSONEncoder
Zet Swift-structs of -klassen die Encodable zijn om naar JSON-data.
let data = try JSONEncoder().encode(prijs)keyboardShortcut
Voegt een sneltoets toe aan een knop of menu-item.
Button("Venster") { openWindow(id: "klok") }
.keyboardShortcut("1", modifiers: .command)LazyVStack / LazyHStack
Een stapelview die elementen pas aanmaakt als ze zichtbaar worden. Efficiënter dan een gewone VStack bij lange lijsten.
ScrollView {
LazyVStack {
ForEach(items) { item in ItemView(item: item) }
}
}List
Een scrollbare lijst van rijen, geoptimaliseerd voor macOS/iOS. Ondersteunt selectie, swipe-acties en secties.
List(prijzen) { prijs in
Text("\(prijs.uur):00 – €\(prijs.bedrag, specifier: "%.2f")")
}Logger (os.Logger)
Professionele logging met niveaus (debug, info, warning, error) en filters op subsysteem en categorie. Logs zijn zichtbaar in Console.app.
import os
let logger = Logger(subsystem: "bnelissen.EnergyClock", category: "netwerk")
logger.info("Prijzen geladen: \(aantal, privacy: .public)")onChange
Voert code uit wanneer een waarde verandert.
.onChange(of: bron) { _, nieuw in
manager.wisselBron(naar: nieuw)
}Optional
Een waarde die er wel of niet kan zijn. Geschreven als Type?. Je moet altijd controleren of er een waarde is voordat je hem gebruikt.
var prijs: Double? = nil
if let p = prijs {
print("Prijs is \(p)")
}Path
Een beschrijving van een vorm of lijn die je kunt tekenen in een Canvas. Bestaat uit lijnsegmenten en bogen.
var pad = Path()
pad.addArc(center: midden, radius: 50, startAngle: .degrees(0), endAngle: .degrees(180), clockwise: false)print()
Toont een waarde op het scherm. Vroeger werden deze teksten op een papieren rol geprint. Nu zie je ze onderaan in Xcode.
print("Hallo, wereld!")
print(leeftijd)Picker
Een keuzelijst waarmee de gebruiker een waarde kan selecteren.
Picker("Bron", selection: $bron) {
ForEach(Bron.allCases) { b in Text(b.naam).tag(b) }
}Privacy Manifest
Een bestand (PrivacyInfo.xcprivacy) dat beschrijft welke systeem-API’s je app gebruikt en waarom. Verplicht voor de App Store sinds 2024.
Scene
Een zelfstandig onderdeel van een SwiftUI-app dat zijn eigen venster(s) beheert. Voorbeelden: WindowGroup, Window, Settings.
ScrollView
Maakt een view scrollbaar als de inhoud groter is dan het scherm.
ScrollView {
VStack { /* lange inhoud */ }
}Semantic Versioning
Een versieschema met drie getallen: MAJOR.MINOR.PATCH. MAJOR voor grote wijzigingen, MINOR voor nieuwe functies, PATCH voor bugfixes.
1.0.0 → eerste release
1.0.1 → kleine bugfix
1.1.0 → nieuwe functie
2.0.0 → grote herziening
Settings
Een speciale Scene in SwiftUI die het instellingenvenster van een macOS-app beheert. Wordt automatisch geopend met Cmd+,.
Settings {
InstellingenView()
}Stepper
Een besturingselement waarmee de gebruiker een getal kan ophogen of verlagen.
Stepper("Uren: \(uren)", value: $uren, in: 1...24)struct
Een gegevenstype dat je zelf definieert. Een struct is als een recept: het beschrijft hoe iets eruitziet, maar is zelf nog geen gebakken brood.
struct Prijs {
var uur: Int
var bedrag: Double
}Swift
Programmeertaal geïntroduceerd door Apple in 2014, sindsdien open source. De naam is Engels voor snel — de taal is ontworpen om snel en veilig te zijn. Het logo is een gierzwaluw, een vogel die bekendstaat als een van de snelste ter wereld.
SwiftUI
Het framework van Apple waarmee je de interface van een app bouwt. Met SwiftUI beschrijf je hoe je app eruitziet — knoppen, teksten, lijsten — en Apple zorgt dat het er goed uitziet. SwiftUI werkt op Mac, iPhone, iPad en meer.
String
Een stuk tekst. De naam komt van het Engelse string, dat “reeks” of “draad” betekent — een reeks tekens achter elkaar geregen.
var naam: String = "Emma"
var boodschap = "Hallo, wereld!"Tab / TabView
Toont meerdere schermen met tabbladen. In iOS standaard onderin, in macOS als tabbladen bovenin.
TabView {
Tab("Klok", systemImage: "clock") { KlokView() }
Tab("Lijst", systemImage: "list.bullet") { LijstView() }
}task
Een view-modifier die een async-functie uitvoert zodra de view verschijnt.
.task {
await manager.laadPrijzen()
}TestFlight
Apples platform voor bètatesten. Hiermee kun je je app naar testrs sturen vóórdat hij in de App Store staat.
Text
Een SwiftUI-view die een stuk tekst toont op het scherm.
Text("Hallo, wereld!")TimelineEntry / TimelineProvider
WidgetKit-protocollen voor het leveren van een tijdlijn van momenten waarop de widget wordt bijgewerkt.
struct MijnEntry: TimelineEntry {
let date: Date
}Toewijzen
Een waarde koppelen aan een variabele of constante. Het = teken is het toewijzingsteken.
var naam = "Pim" // toewijzing: "Pim" wordt toegewezen aan naam
let leeftijd = 9 // ook een toewijzing, maar dan met letToggle
Een schakelaar waarmee de gebruiker iets aan of uit kan zetten.
Toggle("Donkere modus", isOn: $donkereModus)Type-inferentie
Swift kijkt naar de waarde die je invult en bepaalt zelf welk type het is. Schrijf je var leeftijd = 9, dan ziet Swift een heel getal en kiest automatisch Int. Je hoeft het type niet zelf op te schrijven.
var leeftijd = 9 // Swift kiest Int
var naam = "Pim" // Swift kiest String
var temperatuur = 36.6 // Swift kiest DoubleURLSession
Het netwerk-framework van Apple. Gebruikt async/await voor het ophalen van data van internet.
let (data, _) = try await URLSession.shared.data(from: url)UserDefaults
Slaat kleine hoeveelheden gegevens op die bewaard blijven als de app wordt afgesloten — zoals een brievenbus die altijd op je staat te wachten.
UserDefaults.standard.set(true, forKey: "donkereModus")var / let
var is een variabele die je kunt veranderen. let is een constante die je niet kunt veranderen nadat hij is ingesteld.
var leeftijd = 9 // mag veranderen
let naam = "Pim" // blijft altijd "Pim"View
Het basisprotocol voor alles wat je ziet in SwiftUI. Elke UI-component is een View.
struct GroetView: View {
var body: some View {
Text("Hallo!")
}
}VStack / HStack
Schikken views verticaal (VStack) of horizontaal (HStack) onder of naast elkaar.
VStack {
Text("Bovenste regel")
Text("Onderste regel")
}Widget / WidgetKit
Een mini-versie van je app die op het bureaublad staat. WidgetKit is het framework dat de tijdlijn en weergave van widgets beheert.
Window / WindowGroup
Window is een enkel, uniek venster in een macOS-app. WindowGroup laat meerdere instanties toe (standaard voor documenten).
Window("Info", id: "info") { InfoView() }withAnimation
Voert wijzigingen in een view uit met een animatie.
withAnimation(.easeInOut(duration: 0.5)) {
toonDetail = true
}ZStack
Stapelt views over elkaar heen (z-richting: diepte).
ZStack {
Circle().fill(.blue)
Text("Midden")
}Xcode
De IDE van Apple waarmee je apps maakt voor Mac, iPhone, iPad en meer. Xcode bevat een code-editor, een manier om je app te starten en testen, en hulp bij het opsporen van fouten. Het is gratis te downloaden via de Mac App Store.