Sobes.tech
Junior

Ce este centrul de notificări?

sobes.tech AI

Răspuns de la AI

Centul de notificări, sau NotificationCenter, este un mecanism în Foundation care implementează pattern-ul "Observator" (Observer). Permite obiectelor să difuzeze notificări în mod broadcast altor obiecte care sunt abonate la ele.

Componente cheie:

  • Publisher (Emitent): Obiectul care publică notificarea.
  • Observer (Observator): Obiectul care se abonează la notificare și răspunde la ea.
  • Notification (Notificare): Obiect care reprezintă evenimentul în sine. Conține numele notificării, expeditorul și un dicționar opțional cu informații despre utilizator.

Avantaje:

  • Cuplaj slab între obiecte.
  • Convenabil pentru difuzarea evenimentelor către mulți abonați.

Dezavantaje:

  • Complexitate în depanare din cauza interacțiunii indirecte.
  • Probleme potențiale cu gestionarea ciclului de viață al observatorilor dacă nu sunt eliminați corect.

Exemplu de publicare și abonare:

import Foundation

// Numele notificării
extension Notification.Name {
    static let myCustomNotification = Notification.Name("myCustomNotification")
}

// Emitent
class Publisher {
    func publishNotification() {
        let userInfo: [AnyHashable: Any] = ["data": "some important data"]
        NotificationCenter.default.post(name: .myCustomNotification, object: self, userInfo: userInfo)
        print("Notificare publicată")
    }
}

// Observator
class Observer {
    init() {
        // Abonare la notificare
        NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: .myCustomNotification, object: nil)
    }

    // Metodă apelată la primirea notificării
    @objc func handleNotification(_ notification: Notification) {
        print("Notificare primită!")
        if let userInfo = notification.userInfo {
            print("Informații utilizator: \(userInfo)")
        }
    }

    deinit {
        // Dezabonare de la notificare la dezalocare
        NotificationCenter.default.removeObserver(self)
    }
}

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

publisher.publishNotification()