Swift Academy · Les

Notification userInfo-payloads

Voeg getypeerde gegevens toe aan notificaties.

Les 2 van 413 stappen

Notification userInfo-payloads is een gratis Swift Academy-les op CoddyKit. Dit is les 2 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.

Notification userInfo

Een melding kan gegevens bevatten in het woordenboek userInfo, zodat observers details ontvangen over wat er is gebeurd.

Een melding plaatsen met userInfo

Geef een woordenboek mee aan post(name:object:userInfo:). Sleutels en waarden zijn van het type Any, dus elk gegevenspakket past.

import Foundation

let center = NotificationCenter.default
let name = Notification.Name("scoreChanged")
center.post(name: name, object: nil, userInfo: ["score": 100])
print("Posted with payload")

userInfo uitlezen

Lees in de observer notification.userInfo uit en zet de verwachte waarde om naar het juiste type.

import Foundation

let center = NotificationCenter.default
let name = Notification.Name("scoreChanged")
_ = center.addObserver(forName: name, object: nil, queue: nil) { note in
    if let score = note.userInfo?["score"] as? Int {
        print("Score: \(score)")
    }
}
center.post(name: name, object: nil, userInfo: ["score": 42])

Meerdere waarden

Het woordenboek kan meerdere sleutels bevatten, zodat gerelateerde gegevens samen worden verpakt.

import Foundation

let center = NotificationCenter.default
let name = Notification.Name("login")
_ = center.addObserver(forName: name, object: nil, queue: nil) { note in
    let user = note.userInfo?["user"] as? String ?? "?"
    let admin = note.userInfo?["admin"] as? Bool ?? false
    print("\(user) admin=\(admin)")
}
center.post(name: name, object: nil, userInfo: ["user": "ada", "admin": true])

Typesafe sleutels

Het gebruik van sleutels als tekenreekswaarden is foutgevoelig. Definieer constanten om verschillen tussen afzender en observer te voorkomen.

import Foundation

enum Keys { static let amount = "amount" }
let center = NotificationCenter.default
let name = Notification.Name("purchase")
center.post(name: name, object: nil, userInfo: [Keys.amount: 9.99])
print("Used a constant key")

Voorzichtig omgaan met typeconversies

Omdat de waarden van het type Any zijn, kunnen typeconversies mislukken. Gebruik optionele binding zodat een verkeerd type geen crash veroorzaakt.

import Foundation

let note = Notification(name: Notification.Name("x"), object: nil, userInfo: ["n": "oops"])
if let n = note.userInfo?["n"] as? Int {
    print(n)
} else {
    print("Wrong type, handled safely")
}

Aangepaste structs als gegevenspakket

Je kunt een volledige struct als waarde opslaan en deze later weer naar het oorspronkelijke type omzetten, zodat gegevenspakketten typesafe blijven.

import Foundation

struct Event { let id: Int }
let note = Notification(name: Notification.Name("e"), object: nil, userInfo: ["event": Event(id: 7)])
if let e = note.userInfo?["event"] as? Event {
    print("Event id: \(e.id)")
}

De melding omwikkelen

Een hulpfunctie die userInfo opbouwt, houdt het samenstellen van gegevenspakketten in de hele app consistent.

import Foundation

let name = Notification.Name("progress")
func postProgress(_ value: Int) {
    NotificationCenter.default.post(name: name, object: nil, userInfo: ["value": value])
}
postProgress(75)
print("Posted progress")

Het uitlezen omwikkelen

Combineer de hulpfunctie met een accessor met een vast type, zodat observers de logica voor typeconversie niet herhalen.

import Foundation

extension Notification {
    var progressValue: Int? { userInfo?["value"] as? Int }
}
let n = Notification(name: Notification.Name("progress"), object: nil, userInfo: ["value": 50])
print(n.progressValue ?? -1)

Standaardwaarden en ontbrekende sleutels

Als een sleutel ontbreekt, levert de typeconversie nil op. Geef een zinvolle standaardwaarde met de nil-coalescingoperator.

import Foundation

let n = Notification(name: Notification.Name("y"), object: nil, userInfo: [:])
let count = n.userInfo?["count"] as? Int ?? 0
print("Count defaulted to \(count)")

Houd gegevenspakketten klein

userInfo is het meest geschikt voor kleine, serialiseerbare gegevens. Geef voor grote objecten een identificatie mee en laat observers de rest ophalen.

import Foundation

let name = Notification.Name("itemUpdated")
// Send just an id, not a heavy object graph.
NotificationCenter.default.post(name: name, object: nil, userInfo: ["id": 1234])
print("Posted a lightweight payload")

Korte controle

Van welk type zijn de waarden in het userInfo-woordenboek van een melding?

Samenvatting

Het woordenboek userInfo bevat meldingsgegevens als waarden van het type Any, dus observers moeten deze zorgvuldig naar het juiste type omzetten. Gebruik constante sleutels, hulpfuncties en accessors met een vast type, geef ontbrekende sleutels standaardwaarden en houd gegevenspakketten klein. Volgende: observers veilig verwijderen.

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 “Notification userInfo-payloads” gratis?

Ja — je kunt hier op het web alle 3 lessen van het leerpad Swift Academy, waaronder “Notification userInfo-payloads”, 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 “Notification userInfo-payloads”?

Voeg getypeerde gegevens toe aan notificaties. 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 2 van 4.

Hoe lang duurt de les “Notification userInfo-payloads”?

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. Notificaties plaatsen en observeren
  2. Notification userInfo-payloads
  3. Observers veilig verwijderen
  4. Alternatieven voor het observerpatroon
← Terug naar Swift Academy