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)
_ = tokenObservadores 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
- Publicação e Observação de Notificações
- Cargas userInfo de Notificações
- Remoção Segura de Observadores
- Alternativas ao Padrão Observer