NSNotificationCenter addObserver en Swift: Guía completa con ejemplos

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

NSNotificationCenter addObserver en Swift: Guía completa con ejemplos prácticos



Imagina que estás escribiendo una aplicación para pedir pizza. El usuario presiona «Pagar» en la pantalla del carrito, y unos segundos después, otra pantalla — «Estado del pedido» — debe mostrar automáticamente que la pizza ya está en camino. ¿Cómo conectar estas dos pantallas sin convertir el código en un espagueti de closures y delegados? La respuesta es NSNotificationCenter (y en Swift moderno, simplemente NotificationCenter).



Este patrón es uno de los más populares en el desarrollo de iOS. En Stack Overflow, la pregunta «NSNotificationCenter addObserver in Swift» acumula miles de visitas porque incluso desarrolladores experimentados a veces se confunden con la sintaxis, la gestión de memoria y la eliminación de observadores. Aclaremos de una vez por todas cómo usar correctamente las notificaciones en Swift.



¿Qué es NotificationCenter y para qué sirve?



NotificationCenter es un mecanismo integrado de iOS que implementa el patrón «Observador» (Observer). Permite que unos objetos (emisores) envíen mensajes y que otros (observadores) se suscriban a esos mensajes y reaccionen a ellos. La principal ventaja es el acoplamiento débil: el emisor y el receptor no saben nada el uno del otro.



¿Cuándo es útil?

  • Notificar a una pantalla sobre una acción en otra (por ejemplo, carrito → estado del pedido)
  • Reaccionar a eventos del sistema (el teclado apareció, la aplicación pasó a segundo plano)
  • Actualizar la interfaz de usuario después de completar una carga de datos en segundo plano


En proyectos antiguos (Objective-C) se usaba NSNotificationCenter; en Swift, a partir de iOS 9, se llama simplemente NotificationCenter. En este artículo usaremos la sintaxis moderna de Swift.



Cómo suscribirse a una notificación: addObserver



El método addObserver es el corazón del sistema. Registra un objeto como observador de una notificación específica. Hay dos formas principales: mediante selector (clásica) y mediante bloque (closure).



1. Método addObserver con selector (target-action)



Este método proviene de Objective-C. Especificas el objeto observador, el selector (método que se llamará), el nombre de la notificación y, opcionalmente, el objeto emisor.



import UIKit

class OrderStatusViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Nos suscribimos a la notificación de pago NotificationCenter.default.addObserver( self, selector: #selector(didReceivePaymentNotification(_:)), name: Notification.Name("PaymentDidSucceed"), object: nil ) } @objc func didReceivePaymentNotification(_ notification: Notification) { print("¡Pago exitoso! Actualizando el estado del pedido.") // Aquí actualizamos la UI } // IMPORTANTE: ¡no olvides cancelar la suscripción! deinit { NotificationCenter.default.removeObserver(self) }}


¿Qué es importante aquí?

  • El método manejador debe estar marcado con @objc — es un requisito del runtime de Objective-C.
  • El parámetro notification de tipo Notification contiene userInfo — un diccionario con datos adicionales.
  • Si pasas object: nil, el observador recibirá notificaciones de cualquier emisor.


2. Método addObserver con closure (iOS 9+)



Una forma más moderna y segura es usar un bloque. No requiere @objc y permite capturar variables externas.



class PaymentManager {        private var observer: NSObjectProtocol?        func startObservingPayment() {        observer = NotificationCenter.default.addObserver(            forName: Notification.Name("PaymentDidSucceed"),                

Blogs

Book Recommendations