Sobes.tech
Junior

O que é o centro de notificações?

sobes.tech IA

Resposta da IA

O centro de notificações, ou NotificationCenter, é um mecanismo no Foundation que implementa o padrão "Observador" (Observer). Permite que objetos enviem notificações de forma ampla a outros objetos que estão inscritos nelas.

Componentes principais:

  • Publisher (Emissor): Objeto que publica a notificação.
  • Observer (Observador): Objeto que se inscreve na notificação e reage a ela.
  • Notification (Notificação): Objeto que representa o evento em si. Contém o nome da notificação, o remetente e um dicionário opcional de informações do usuário.

Vantagens:

  • Baixo acoplamento entre objetos.
  • Conveniente para distribuir eventos a muitos assinantes.

Desvantagens:

  • Complexidade na depuração devido à interação indireta.
  • Problemas potenciais na gestão do ciclo de vida dos observadores se não forem removidos corretamente.

Exemplo de publicação e assinatura:

import Foundation

// Nome da notificação
extension Notification.Name {
    static let myCustomNotification = Notification.Name("myCustomNotification")
}

// Emissor
class Publisher {
    func publishNotification() {
        let userInfo: [AnyHashable: Any] = ["data": "some important data"]
        NotificationCenter.default.post(name: .myCustomNotification, object: self, userInfo: userInfo)
        print("Notificação publicada")
    }
}

// Observador
class Observer {
    init() {
        // Inscrição na notificação
        NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: .myCustomNotification, object: nil)
    }

    // Método chamado ao receber a notificação
    @objc func handleNotification(_ notification: Notification) {
        print("Notificação recebida!")
        if let userInfo = notification.userInfo {
            print("Informações do usuário: \(userInfo)")
        }
    }

    deinit {
        // Cancelar inscrição na notificação ao desinicializar
        NotificationCenter.default.removeObserver(self)
    }
}

// Uso
let publisher = Publisher()
let observer = Observer()

publisher.publishNotification()