Sobes.tech
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()