0Pricing
Swift Academy · Lección

Cargas userInfo de las notificaciones

Adjunte datos tipados a las notificaciones.

Cargas userInfo de las notificaciones es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Swift Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Swift Academy incluye 4 lecciones en total.

userInfo de las notificaciones

Una notificación puede transportar datos en su diccionario userInfo, lo que permite que los observadores reciban detalles sobre lo ocurrido.

Publicar con userInfo

Pase un diccionario a post(name:object:userInfo:). Las claves y los valores son de tipo Any, por lo que puede incluir cualquier carga útil.

import Foundation

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

Leer userInfo

En el observador, lea notification.userInfo y convierta el valor al tipo que espera.

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])

Varios valores

El diccionario puede contener varias claves y agrupar datos relacionados.

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])

Claves seguras respecto al tipo

Usar claves literales de cadena puede provocar errores. Defina constantes para evitar discrepancias entre quien publica y quien observa.

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")

Convertir con cuidado

Como los valores son de tipo Any, las conversiones pueden fallar. Use un enlace opcional para que un tipo incorrecto no provoque un error.

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")
}

Estructuras personalizadas como carga útil

Puede almacenar una estructura completa como valor y convertirla de nuevo, manteniendo las cargas útiles con tipos fuertes.

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)")
}

Envolver la publicación

Una función auxiliar que construya el userInfo mantiene coherente la creación de cargas útiles en toda la app.

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")

Envolver la lectura

Combine la función auxiliar con un accesorio tipado para que los observadores no repitan la lógica de conversión.

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)

Claves predeterminadas frente a claves ausentes

Si falta una clave, la conversión produce nil. Proporcione un valor predeterminado adecuado con el operador de coalescencia 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)")

Mantener pequeñas las cargas útiles

userInfo es más adecuado para datos pequeños y serializables. Para objetos grandes, pase un identificador y permita que los observadores obtengan el resto.

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")

Comprobación rápida

¿De qué tipo son los valores almacenados en el diccionario userInfo de una notificación?

Repaso

El diccionario userInfo transporta datos de notificaciones como valores Any, por lo que los observadores deben hacer las conversiones con cuidado. Use claves constantes, funciones auxiliares y accesorios tipados, proporcione valores predeterminados para las claves ausentes y mantenga pequeñas las cargas útiles. Siguiente: eliminar observadores de forma segura.

Preguntas frecuentes

¿La lección «Cargas userInfo de las notificaciones» es gratis?

Sí — el texto completo de «Cargas userInfo de las notificaciones» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Swift Academy, actualiza a CoddyKit PRO. El curso de Swift Academy incluye 4 lecciones en total.

¿Qué aprenderé en «Cargas userInfo de las notificaciones»?

Adjunte datos tipados a las notificaciones. Practicas Swift Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.

¿Necesito experiencia previa para empezar Swift Academy?

No se requiere experiencia previa. Swift Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.

¿Cuánto tiempo toma la lección «Cargas userInfo de las notificaciones»?

La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.

¿Puedo escribir y ejecutar código en esta lección de Swift Academy?

Sí. Cada lección de Swift Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.

Todas las lecciones de este curso

  1. Publicar y observar notificaciones
  2. Cargas userInfo de las notificaciones
  3. Eliminar observadores de forma segura
  4. Alternativas al patrón Observer
← Volver a Swift Academy