Publicar y observar notificaciones
Envíe y reciba eventos en toda la app.
Publicar y observar notificaciones es una lección gratuita de Swift Academy en CoddyKit. Esta es la lección 1 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.
NotificationCenter
NotificationCenter es un mecanismo de difusión: una parte de la app publica una notificación y cualquier número de observadores reacciona, sin que el emisor y los receptores se conozcan entre sí.
El centro predeterminado
La mayoría del código utiliza NotificationCenter.default, un centro compartido que distribuye notificaciones entre todo el proceso.
import Foundation
let center = NotificationCenter.default
print("Using the default notification center")Definir el nombre de una notificación
Las notificaciones se identifican mediante un Notification.Name. Definir una constante evita errores tipográficos y centraliza el nombre.
import Foundation
extension Notification.Name {
static let dataUpdated = Notification.Name("dataUpdated")
}
print("Defined a notification name")Publicar una notificación
post(name:object:) difunde la notificación. El object suele ser el emisor o nil.
import Foundation
let center = NotificationCenter.default
let name = Notification.Name("ping")
center.post(name: name, object: nil)
print("Posted a notification")Añadir un observador (closure)
La API basada en bloques addObserver(forName:object:queue:using:) ejecuta una closure cada vez que se activa la notificación y devuelve un token.
import Foundation
let center = NotificationCenter.default
let name = Notification.Name("ping")
let token = center.addObserver(forName: name, object: nil, queue: .main) { _ in
print("Observer fired")
}
center.post(name: name, object: nil)
_ = tokenObservadores basados en selectores
La API clásica utiliza un destino y #selector. El método recibe un argumento Notification.
import Foundation
class Watcher: NSObject {
func start() {
NotificationCenter.default.addObserver(
self, selector: #selector(handle(_:)),
name: Notification.Name("ping"), object: nil)
}
@objc func handle(_ n: Notification) { print("Handled") }
}
Watcher().start()Recibir la notificación
La closure o el método del observador recibe un valor Notification que contiene su nombre, objeto y userInfo.
import Foundation
let center = NotificationCenter.default
let name = Notification.Name("event")
_ = center.addObserver(forName: name, object: nil, queue: nil) { note in
print("Got: \(note.name.rawValue)")
}
center.post(name: name, object: nil)Difusión de uno a muchos
Muchos observadores pueden escuchar el mismo nombre. Un solo post notifica a todos.
import Foundation
let center = NotificationCenter.default
let name = Notification.Name("refresh")
_ = center.addObserver(forName: name, object: nil, queue: nil) { _ in print("A") }
_ = center.addObserver(forName: name, object: nil, queue: nil) { _ in print("B") }
center.post(name: name, object: nil)Filtrar por objeto
Pasar un object distinto de nil a addObserver aplica un filtro para que el observador solo se active con publicaciones de ese emisor.
import Foundation
let center = NotificationCenter.default
let sender = NSObject()
let name = Notification.Name("scoped")
_ = center.addObserver(forName: name, object: sender, queue: nil) { _ in
print("Only from sender")
}
center.post(name: name, object: sender)Notificaciones del sistema
El sistema publica muchas notificaciones integradas, como eventos del teclado o del ciclo de vida de la app, que se observan de la misma manera.
import Foundation
// e.g. UIApplication.didEnterBackgroundNotification on iOS
let custom = Notification.Name("appReady")
_ = NotificationCenter.default.addObserver(forName: custom, object: nil, queue: nil) { _ in
print("App ready")
}Cuándo usarlo
NotificationCenter es adecuado para eventos globales de uno a muchos en los que el emisor y los receptores deben permanecer desacoplados. Para vínculos estrechos de uno a uno, un delegado suele ser más claro.
import Foundation
// Broadcast a global event many parts of the app care about.
let name = Notification.Name("userLoggedOut")
NotificationCenter.default.post(name: name, object: nil)
print("Broadcast logout")Comprobación rápida
¿Qué hace NotificationCenter.default.post(name:object:)?
Repaso
NotificationCenter.default desacopla emisores y receptores: se define un Notification.Name, se publica con post y se usa addObserver con una closure o un selector para reaccionar. Admite difusión de uno a muchos y filtrado por objeto. Siguiente: transportar datos en userInfo.
Preguntas frecuentes
¿La lección «Publicar y observar notificaciones» es gratis?
Sí — el texto completo de «Publicar y observar 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 «Publicar y observar notificaciones»?
Envíe y reciba eventos en toda la app. 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 1 de 4.
¿Cuánto tiempo toma la lección «Publicar y observar 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
- Publicar y observar notificaciones
- Cargas userInfo de las notificaciones
- Eliminar observadores de forma segura
- Alternativas al patrón Observer