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