Sobes.tech
Junior

Какво е център за уведомления?

sobes.tech AI

Отговор от AI

Център за известия или NotificationCenter е механизъм във Foundation, който реализира шаблона "Наблюдател" (Observer). Позволява на обекти широко да разпространяват известия към други обекти, които са се абонирали за тях.

Ключови компоненти:

  • Publisher (Издател): Обект, който публикува известието.
  • Observer (Наблюдател): Обект, който се абонира за известието и реагира на него.
  • Notification (Известие): Обект, който представлява самото събитие. Съдържа името на известието, изпращача и опционален речник с потребителска информация.

Предимства:

  • Слаба свързаност между обектите.
  • Удобен за разпространение на събития към много абонати.

Недостатъци:

  • Сложност при отстраняване на грешки поради косвено взаимодействие.
  • Потенциални проблеми с управлението на жизнения цикъл на наблюдателите, ако не бъдат правилно премахнати.

Пример за публикуване и абониране:

import Foundation

// Име на известието
extension Notification.Name {
    static let myCustomNotification = Notification.Name("myCustomNotification")
}

// Издател
class Publisher {
    func publishNotification() {
        let userInfo: [AnyHashable: Any] = ["data": "some important data"]
        NotificationCenter.default.post(name: .myCustomNotification, object: self, userInfo: userInfo)
        print("Известие публикувано")
    }
}

// Наблюдател
class Observer {
    init() {
        // Абониране за известие
        NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: .myCustomNotification, object: nil)
    }

    // Метод, който се извиква при получаване на известие
    @objc func handleNotification(_ notification: Notification) {
        print("Известие получено!")
        if let userInfo = notification.userInfo {
            print("Потребителска информация: \(userInfo)")
        }
    }

    deinit {
        // Отписване от известието при деинициализация
        NotificationCenter.default.removeObserver(self)
    }
}

// Използване
let publisher = Publisher()
let observer = Observer()

publisher.publishNotification()