Notification-userInfo-Payloads
Hängen Sie typisierte Daten an Benachrichtigungen an.
Notification-userInfo-Payloads ist eine kostenlose Swift Academy-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Swift Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Notification userInfo
Eine Benachrichtigung kann Daten in ihrem userInfo-Dictionary übertragen, sodass Beobachter Details zum aufgetretenen Ereignis erhalten.
Mit userInfo senden
Übergeben Sie ein Dictionary an post(name:object:userInfo:). Schlüssel und Werte sind vom Typ Any, sodass sich jede Nutzlast übertragen lässt.
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 auslesen
Lesen Sie im Beobachter notification.userInfo aus und wandeln Sie den erwarteten Wert in den passenden Typ um.
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])Mehrere Werte
Das Dictionary kann mehrere Schlüssel enthalten und so zusammengehörige Daten bündeln.
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])Typsichere Schlüssel
Die Verwendung von Schlüsseln als String-Literalen ist fehleranfällig. Definieren Sie Konstanten, um Abweichungen zwischen Absender und Beobachter zu vermeiden.
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")Vorsichtig typumwandeln
Da die Werte vom Typ Any sind, können Typumwandlungen fehlschlagen. Verwenden Sie optionales Binden, damit ein falscher Typ keinen Absturz verursacht.
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")
}Eigene Structs als Nutzlast
Sie können eine vollständige Struct als Wert speichern und wieder in diesen Typ umwandeln, sodass die Nutzlast typsicher bleibt.
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)")
}Das Senden kapseln
Eine Hilfsfunktion, die das userInfo erstellt, sorgt im gesamten App-Projekt für eine einheitliche Erstellung der Nutzlast.
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")Das Auslesen kapseln
Ergänzen Sie die Hilfsfunktion durch einen typisierten Zugriff, damit Beobachter die Logik zur Typumwandlung nicht wiederholen müssen.
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)Standardwert oder fehlender Schlüssel
Wenn ein Schlüssel fehlt, ergibt die Typumwandlung nil. Geben Sie mit dem Nil-Coalescing-Operator einen sinnvollen Standardwert an.
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)")Nutzlasten klein halten
userInfo eignet sich am besten für kleine, serialisierbare Daten. Übergeben Sie bei großen Objekten stattdessen eine Kennung und lassen Sie die Beobachter die übrigen Daten abrufen.
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")Kurze Überprüfung
Welchen Typ haben die Werte im userInfo-Dictionary einer Benachrichtigung?
Zusammenfassung
Das userInfo-Dictionary überträgt Benachrichtigungsdaten als Any-Werte, daher müssen Beobachter vorsichtig typumwandeln. Verwenden Sie konstante Schlüssel, Hilfsfunktionen und typisierte Zugriffe, legen Sie für fehlende Schlüssel Standardwerte fest und halten Sie die Nutzlasten klein. Als Nächstes: Beobachter sicher entfernen.
Lerne Swift mit einem KI-Tutor — kostenlos
Schreibe und führe echten Code in deinem Browser aus, bekomme sofortige Hilfe von einem 24/7 KI-Tutor und setze dein Lernen im Web oder in der App fort.
- Kurse
- 122
- Lektionen
- 409
Häufig gestellte Fragen
Ist die Lektion „Notification-userInfo-Payloads“ kostenlos?
Ja — der vollständige Text von „Notification-userInfo-Payloads“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Swift Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Swift Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Notification-userInfo-Payloads“?
Hängen Sie typisierte Daten an Benachrichtigungen an. Du übst Swift Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Swift Academy zu starten?
Keine Vorkenntnisse erforderlich. Swift Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.
Wie lange dauert die Lektion „Notification-userInfo-Payloads“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Swift Academy-Lektion Code schreiben und ausführen?
Ja. Jede Swift Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Benachrichtigungen senden und beobachten
- Notification-userInfo-Payloads
- Observer sicher entfernen
- Alternativen zum Observer-Pattern