Sobes.tech
Junior

Co je to centrum oznámení?

sobes.tech AI

Odpověď od AI

Centrum oznámení, nebo NotificationCenter, je mechanismus v Foundation, který implementuje vzor "Pozorovatel" (Observer). Umožňuje objektům široce rozesílat oznámení ostatním objektům, které jsou na ně přihlášeny.

Klíčové komponenty:

  • Publisher (Vydavatel): Objekt, který zveřejňuje oznámení.
  • Observer (Pozorovatel): Objekt, který se na oznámení přihlásí a na něj reaguje.
  • Notification (Oznámení): Objekt představující samotnou událost. Obsahuje název oznámení, odesílatele a volitelný slovník uživatelských informací.

Výhody:

  • Slabé propojení mezi objekty.
  • Pohodlné pro rozesílání událostí mnoha odběratelům.

Nevýhody:

  • Složitost ladění kvůli nepřímé interakci.
  • Potenciální problémy s řízením životního cyklu pozorovatelů, pokud nejsou správně odstraněni.

Příklad publikace a přihlášení:

import Foundation

// Název oznámení
extension Notification.Name {
    static let myCustomNotification = Notification.Name("myCustomNotification")
}

// Vydavatel
class Publisher {
    func publishNotification() {
        let userInfo: [AnyHashable: Any] = ["data": "some important data"]
        NotificationCenter.default.post(name: .myCustomNotification, object: self, userInfo: userInfo)
        print("Oznámení publikováno")
    }
}

// Pozorovatel
class Observer {
    init() {
        // Přihlášení k oznámení
        NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: .myCustomNotification, object: nil)
    }

    // Metoda volaná při přijetí oznámení
    @objc func handleNotification(_ notification: Notification) {
        print("Oznámení přijato!")
        if let userInfo = notification.userInfo {
            print("Uživatelské informace: \(userInfo)")
        }
    }

    deinit {
        // Odhlášení z oznámení při deinitializaci
        NotificationCenter.default.removeObserver(self)
    }
}

// Použití
let publisher = Publisher()
let observer = Observer()

publisher.publishNotification()