NSNotificationCenter addObserver em Swift: Guia completo com exemplos

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

NSNotificationCenter addObserver em Swift: Guia completo com exemplos práticos



Imagine que você está escrevendo um aplicativo para pedir pizza. O usuário clica em "Pagar" na tela do carrinho e, alguns segundos depois, outra tela — "Status do Pedido" — deve mostrar automaticamente que a pizza já está a caminho. Como conectar essas duas telas sem transformar o código em um espaguete de closures e delegates? A resposta é NSNotificationCenter (no Swift moderno, apenas NotificationCenter).



Este padrão é um dos mais populares no desenvolvimento iOS. No Stack Overflow, a pergunta "NSNotificationCenter addObserver in Swift" recebe milhares de visualizações, porque até desenvolvedores experientes às vezes se confundem com a sintaxe, gerenciamento de memória e remoção de observadores. Vamos entender de uma vez por todas como usar notificações corretamente em Swift.



O que é NotificationCenter e para que serve?



NotificationCenter é um mecanismo embutido do iOS que implementa o padrão "Observador" (Observer). Ele permite que objetos (remetentes) enviem mensagens e que outros (observadores) se inscrevam nessas mensagens e reajam a elas. A principal vantagem é o baixo acoplamento: o remetente e o receptor não sabem nada um sobre o outro.



Quando é útil:

  • Notificar uma tela sobre uma ação em outra (ex: carrinho → status do pedido)
  • Reagir a eventos do sistema (teclado apareceu, aplicativo foi para segundo plano)
  • Atualizar a UI após a conclusão de um carregamento de dados em segundo plano


Em projetos antigos (Objective-C), usava-se NSNotificationCenter; no Swift a partir do iOS 9, ele é chamado simplesmente de NotificationCenter. Neste artigo, usaremos a sintaxe moderna do Swift.



Como se inscrever em uma notificação: addObserver



O método addObserver é o coração do sistema. Ele registra um objeto como observador de uma determinada notificação. Existem duas formas principais: via seletor (clássica) e via bloco (closure).



1. Método addObserver com seletor (target-action)



Esta forma veio do Objective-C. Você especifica o objeto observador, o seletor (método que será chamado), o nome da notificação e, opcionalmente, o objeto remetente.



import UIKit

class OrderStatusViewController: UIViewController { override func viewDidLoad() { super.viewDidLoad() // Inscrevendo-se na notificação de pagamento NotificationCenter.default.addObserver( self, selector: #selector(didReceivePaymentNotification(_:)), name: Notification.Name("PaymentDidSucceed"), object: nil ) } @objc func didReceivePaymentNotification(_ notification: Notification) { print("Pagamento realizado com sucesso! Atualizando status do pedido.") // Aqui atualizamos a UI } // IMPORTANTE: não esquecer de cancelar a inscrição! deinit { NotificationCenter.default.removeObserver(self) }}


O que é importante aqui:

  • O método manipulador deve ser marcado com @objc — requisito do runtime do Objective-C.
  • O parâmetro notification do tipo Notification contém userInfo — um dicionário com dados adicionais.
  • Se passar object: nil, o observador receberá notificações de qualquer remetente.


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



Uma forma moderna e mais segura é usar um bloco. Ela não requer @objc e permite capturar variáveis externas.



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

Blogs

Book Recommendations