0Pricing
Swift Academy · Aula

Publicação e Observação de Notificações

Envie e receba eventos em todo o aplicativo.

Publicação e Observação de Notificações é uma aula grátis de Swift Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Swift Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Swift Academy inclui 4 aulas no total.

NotificationCenter

NotificationCenter é um mecanismo de transmissão: uma parte do app publica uma notificação e qualquer número de observadores reage, sem que o remetente e os receptores conheçam uns aos outros.

O Centro Padrão

A maior parte do código usa NotificationCenter.default, um centro compartilhado que encaminha notificações por todo o processo.

import Foundation

let center = NotificationCenter.default
print("Using the default notification center")

Definindo um Nome de Notificação

As notificações são identificadas por um Notification.Name. Definir uma constante evita erros de digitação e centraliza o nome.

import Foundation

extension Notification.Name {
    static let dataUpdated = Notification.Name("dataUpdated")
}
print("Defined a notification name")

Publicação de uma notificação

post(name:object:) transmite a notificação. O object geralmente é o remetente ou nulo.

import Foundation

let center = NotificationCenter.default
let name = Notification.Name("ping")
center.post(name: name, object: nil)
print("Posted a notification")

Adição de um observador (fechamento)

O addObserver(forName:object:queue:using:) baseado em bloco executa um fechamento sempre que a notificação é disparada e retorna um 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 baseados em seletor

A API clássica usa um destino e #selector. O método recebe um 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()

Recebimento da notificação

O fechamento ou método do observador recebe um valor Notification que contém seu nome, objeto e 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)

Difusão de um para muitos

Vários observadores podem escutar o mesmo nome. Uma única chamada a post notifica todos eles.

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)

Filtragem por objeto

Passar um object não nulo para addObserver cria um filtro para que o observador seja acionado somente por publicações desse remetente.

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)

Notificações do sistema

O sistema publica muitas notificações integradas, como eventos do teclado ou do ciclo de vida do app, que são observadas da mesma maneira.

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

Quando usá-lo

O NotificationCenter é adequado para eventos globais de um para muitos, nos quais o remetente e os receptores devem permanecer desacoplados. Para vínculos diretos de um para um, um delegate costuma ser mais 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")

Verificação rápida

O que NotificationCenter.default.post(name:object:) faz?

Recapitulação

NotificationCenter.default desacopla remetentes e receptores: você define um Notification.Name, faz post dele e usa addObserver com um fechamento ou seletor para reagir. Ele permite difusão de um para muitos e filtragem por objeto. Próximo: transportar dados em userInfo.

Perguntas Frequentes

A aula “Publicação e Observação de Notificações” é grátis?

Sim — o texto completo de “Publicação e Observação de Notificações” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Swift Academy, atualize para CoddyKit PRO. O curso de Swift Academy inclui 4 aulas no total.

O que vou aprender em “Publicação e Observação de Notificações”?

Envie e receba eventos em todo o aplicativo. Você pratica Swift Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Swift Academy?

Nenhuma experiência prévia é necessária. Swift Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Publicação e Observação de Notificações”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Swift Academy?

Sim. Cada aula de Swift Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Publicação e Observação de Notificações
  2. Cargas userInfo de Notificações
  3. Remoção Segura de Observadores
  4. Alternativas ao Padrão Observer
← Voltar para Swift Academy