Sobes.tech
Junior

Mi az értesítési központ?

sobes.tech MI

Válasz az MI-től

Az értesítési központ, vagy NotificationCenter, egy mechanizmus a Foundation-ben, amely megvalósítja a "Megfigyelő" (Observer) mintát. Lehetővé teszi, hogy objektumok széles körben küldjenek értesítéseket más objektumoknak, amelyek feliratkoztak rájuk.

Fő komponensek:

  • Publisher (Kiadó): Objektum, amely közzéteszi az értesítést.
  • Observer (Megfigyelő): Objektum, amely feliratkozik az értesítésre és reagál rá.
  • Notification (Értesítés): Objektum, amely maga az esemény. Tartalmazza az értesítés nevét, küldőjét és egy opcionális felhasználói információkat tartalmazó szótárat.

Előnyök:

  • Gyenge kapcsolódás az objektumok között.
  • Kényelmes események széles körű küldésére sok feliratkozónak.

Hátrányok:

  • Bonyolult hibakeresés az indirekt kölcsönhatás miatt.
  • Potenciális problémák az megfigyelők életciklusának kezelésében, ha nem törlik őket megfelelően.

Példa közzétételre és feliratkozásra:

import Foundation

// Értesítés neve
extension Notification.Name {
    static let myCustomNotification = Notification.Name("myCustomNotification")
}

// Kiadó
class Publisher {
    func publishNotification() {
        let userInfo: [AnyHashable: Any] = ["data": "some important data"]
        NotificationCenter.default.post(name: .myCustomNotification, object: self, userInfo: userInfo)
        print("Értesítés közzétéve")
    }
}

// Megfigyelő
class Observer {
    init() {
        // Feliratkozás az értesítésre
        NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: .myCustomNotification, object: nil)
    }

    // Metódus, amit hívnak az értesítés fogadásakor
    @objc func handleNotification(_ notification: Notification) {
        print("Értesítés fogadva!")
        if let userInfo = notification.userInfo {
            print("Felhasználói információk: \(userInfo)")
        }
    }

    deinit {
        // Feliratkozás lemondása az értesítésről a deinitializáláskor
        NotificationCenter.default.removeObserver(self)
    }
}

// Használat
let publisher = Publisher()
let observer = Observer()

publisher.publishNotification()