Sobes.tech
Junior

Bildiriş mərkəzi nədir?

sobes.tech Süni İntellekt

AI-dan cavab

Bildirişlər mərkəzi və ya NotificationCenter, Foundation-də mövcud olan mexanizmdir və "Müşahidəçi" (Observer) nümunəsini həyata keçirir. Bu, obyektlərin digər obyektlərə geniş yayılmasını təmin edir, onlar isə ona abunə olurlar.

Əsas komponentlər:

  • Publisher (Yayımçı): Bildirişi yayımlayan obyekt.
  • Observer (Müşahidəçi): Bildirişə abunə olan və ona cavab verən obyekt.
  • Notification (Bildiriş): Hadisəni özündə əks etdirən obyekt. O, bildirişin adını, göndərənini və istifadəçi məlumatlarının opsional sözlüyünü ehtiva edir.

Üstünlüklər:

  • Obyektlər arasında zəif əlaqə.
  • Hadisələri çox sayda abunəçiyə yaymaq üçün əlverişli.

Çatışmazlıqlar:

  • Dolaylı qarşılıqlı əlaqə səbəbindən səhvlərin tapılması çətinləşir.
  • Əgər müşahidəçilər düzgün silinməzsə, onların həyat dövrünün idarə olunmasında potensial problemlər.

Yayım və abunəlik nümunəsi:

import Foundation

// Bildiriş adını genişləndirin
extension Notification.Name {
    static let myCustomNotification = Notification.Name("myCustomNotification")
}

// Yayımçı
class Publisher {
    func publishNotification() {
        let userInfo: [AnyHashable: Any] = ["data": "some important data"]
        NotificationCenter.default.post(name: .myCustomNotification, object: self, userInfo: userInfo)
        print("Bildiriş yayımlandı")
    }
}

// Müşahidəçi
class Observer {
    init() {
        // Bildirişə abunə olun
        NotificationCenter.default.addObserver(self, selector: #selector(handleNotification(_:)), name: .myCustomNotification, object: nil)
    }

    // Bildiriş alındıqda çağırılan metod
    @objc func handleNotification(_ notification: Notification) {
        print("Bildiriş alındı!")
        if let userInfo = notification.userInfo {
            print("İstifadəçi məlumatları: \(userInfo)")
        }
    }

    deinit {
        // Deinitializasiya zamanı abunəliyi ləğv edin
        NotificationCenter.default.removeObserver(self)
    }
}

// İstifadə
let publisher = Publisher()
let observer = Observer()

publisher.publishNotification()