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()