0Pricing
Swift Academy · Lección

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)
_ = token

Observadores 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

  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