Junior
Čo je centrum oznámení?
sobes.tech AI
Odpoveď od AI
Centrum oznámení, alebo NotificationCenter, je mechanizmus v Foundation, ktorý implementuje vzor "Pozorovateľ" (Observer). Umožňuje objektom široko rozširovať oznámenia ostatným objektom, ktoré sa na ne prihlásili.
Kľúčové komponenty:
- Publisher (Vydavateľ): Objekt, ktorý zverejňuje oznámenie.
- Observer (Pozorovateľ): Objekt, ktorý sa prihlási na oznámenie a naň reaguje.
- Notification (Oznámenie): Objekt, ktorý predstavuje samotnú udalosť. Obsahuje názov oznámenia, odosielateľa a voliteľný slovník s používateľskými informáciami.
Výhody:
- Slabé prepojenie medzi objektmi.
- Vhodné na rozosielanie udalostí mnohým odberateľom.
Nevýhody:
- Zložitosť pri ladení kvôli nepriamej interakcii.
- Potenciálne problémy s riadením životného cyklu pozorovateľov, ak nie sú správne odstránení.
Príklad publikovania a prihlásenia:
import Foundation
// Názov oznámenia
extension Notification.Name {
static let myCustomNotification = Notification.Name("myCustomNotification")
}
// Vydavateľ
class Publisher {
func publishNotification() {
let userInfo: [AnyHashable: Any] = ["data": "some important data"]
NotificationCenter.default.post(name: .myCustomNotification, object: self, userInfo: userInfo)
print("Oznámenie publikované")
}
}
// Pozorovateľ
class Observer {
init() {
// Prihlásenie na oznámenie
NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: .myCustomNotification, object: nil)
}
// Metóda, ktorá sa volá pri prijatí oznámenia
@objc func handleNotification(_ notification: Notification) {
print("Oznámenie prijaté!")
if let userInfo = notification.userInfo {
print("Používateľské informácie: \(userInfo)")
}
}
deinit {
// Odhlásenie z oznámenia pri deinit
NotificationCenter.default.removeObserver(self)
}
}
// Použitie
let publisher = Publisher()
let observer = Observer()
publisher.publishNotification()