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": "зарим чухал мэдээлэл"]
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()