Charges utiles userInfo des notifications
Ajoutez des données typées aux notifications.
Charges utiles userInfo des notifications est une leçon Swift Academy gratuite sur CoddyKit. Ceci est la leçon 2 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Swift Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Swift Academy comprend 4 leçons au total.
Données userInfo des notifications
Une notification peut transporter des données dans son dictionnaire userInfo, ce qui permet aux observateurs de recevoir des détails sur ce qui s'est produit.
Publier avec userInfo
Transmettez un dictionnaire à post(name:object:userInfo:). Les Keys et les valeurs sont de type Any : toutes les données utiles peuvent donc y être placées.
import Foundation
let center = NotificationCenter.default
let name = Notification.Name("scoreChanged")
center.post(name: name, object: nil, userInfo: ["score": 100])
print("Posted with payload")Lire userInfo
Dans l'observateur, lisez notification.userInfo et convertissez la valeur attendue vers le type approprié.
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])Valeurs multiples
Le dictionnaire peut contenir plusieurs clés et regrouper ainsi des données liées.
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])Clés sûres du point de vue des types
L'utilisation de clés littérales de type chaîne est source d'erreurs. Définissez des constantes pour éviter les incohérences entre l'émetteur et l'observateur.
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")Effectuer les conversions avec prudence
Comme les valeurs sont de type Any, les conversions peuvent échouer. Utilisez une liaison conditionnelle afin qu'un type incorrect ne provoque pas de plantage.
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")
}Structures personnalisées comme données utiles
Vous pouvez stocker une structure entière comme valeur, puis la reconvertir, afin de conserver des données utiles fortement typées.
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)")
}Encapsuler la publication
Une fonction utilitaire qui construit le userInfo garantit une construction cohérente des données utiles dans toute l'application.
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")Encapsuler la lecture
Associez cette fonction utilitaire à un accesseur typé afin que les observateurs n'aient pas à répéter la logique de conversion.
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)Valeur par défaut et clés absentes
Si une clé est absente, la conversion renvoie nil. Fournissez une valeur par défaut pertinente avec l'opérateur de coalescence nil.
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)")Garder des données utiles de petite taille
userInfo convient surtout aux petites données sérialisables. Pour les objets volumineux, transmettez un identifiant et laissez les observateurs récupérer le reste.
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")Vérification rapide
De quel type sont les valeurs stockées dans le dictionnaire userInfo d'une notification ?
Récapitulatif
Le dictionnaire userInfo transporte les données de la notification sous forme de valeurs Any ; les observateurs doivent donc effectuer les conversions avec prudence. Utilisez des clés constantes, des fonctions utilitaires et des accesseurs typés, prévoyez une valeur par défaut pour les clés absentes et gardez les données utiles de petite taille. Ensuite : supprimer les observateurs en toute sécurité.
Questions Fréquemment Posées
La leçon « Charges utiles userInfo des notifications » est-elle gratuite ?
Oui — le texte complet de « Charges utiles userInfo des notifications » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Swift Academy, passe à CoddyKit PRO. Le cours Swift Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Charges utiles userInfo des notifications » ?
Ajoutez des données typées aux notifications. Tu pratiques Swift Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Swift Academy ?
Aucune expérience préalable n'est requise. Swift Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 2 sur 4.
Combien de temps prend la leçon « Charges utiles userInfo des notifications » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Swift Academy ?
Oui. Chaque leçon Swift Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Publier et observer des notifications
- Charges utiles userInfo des notifications
- Supprimer les observateurs en toute sécurité
- Alternatives au modèle observateur