Junior
Bildirishnomalar markazi nima?
sobes.tech AI
AIdan javob
Bildirishlar markazi yoki NotificationCenter, Foundation ichidagi mexanizmdir va "Kuzatuvchi" (Observer) naqshini amalga oshiradi. U ob'ektlarga keng tarqaladigan bildirishnomalarni yuborishga imkon beradi, ular esa ularga yozilgan bo'lishi mumkin.
Asosiy komponentlar:
- Publisher (Yuboruvchi): Bildirishnomani chop etadigan ob'ekt.
- Observer (Kuzatuvchi): Bildirishnomaga yoziladigan va unga javob beradigan ob'ekt.
- Notification (Bildirishnoma): Hodisa o'zi ifodalaydigan ob'ekt. U bildirishnoma nomi, yuboruvchi va ixtiyoriy foydalanuvchi ma'lumotlari lug'atini o'z ichiga oladi.
Afzalliklar:
- Ob'ektlar o'rtasida zaif bog'liqlik.
- Ko'p yozuvchilarga voqealarni tarqatish uchun qulay.
Kamchiliklar:
- Oraliq ta'sir tufayli xatolarni aniqlash qiyin.
- Kuzatuvchilarning hayot aylanishini to'g'ri boshqarmaslikda potentsial muammolar.
Yozish va yozilish misoli:
import Foundation
// Bildirishnoma nomi
extension Notification.Name {
static let myCustomNotification = Notification.Name("myCustomNotification")
}
// Yuboruvchi
class Publisher {
func publishNotification() {
let userInfo: [AnyHashable: Any] = ["data": "some important data"]
NotificationCenter.default.post(name: .myCustomNotification, object: self, userInfo: userInfo)
print("Bildirishnoma chop etildi")
}
}
// Kuzatuvchi
class Observer {
init() {
// Bildirishnomaga yozilish
NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: .myCustomNotification, object: nil)
}
// Bildirishnoma qabul qilinganda chaqiriladigan metod
@objc func handleNotification(_ notification: Notification) {
print("Bildirishnoma qabul qilindi!")
if let userInfo = notification.userInfo {
print("Foydalanuvchi ma'lumotlari: \(userInfo)")
}
}
deinit {
// Deinitializationda bildirishnomadan chiqarish
NotificationCenter.default.removeObserver(self)
}
}
// Foydalanish
let publisher = Publisher()
let observer = Observer()
publisher.publishNotification()