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