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()