2
votes

Swift / IOS comment mettre à jour à l'aide d'observateurs

Dans Android, nous avons un objet de données en direct mutable lorsque nous le mettons à jour, disons sur un autre thread que nous lui avons attaché un observateur. Lorsque l'objet est mis à jour, l'observateur écoute et met à jour l'interface utilisateur en conséquence.

addObserver(_:forKeyPath:options:context:)

Et dans l'activité (disons comme TableViewController pour swift / IOS)

Nous mettons le observer

liveDataService.observeForever(s -> {
            Log.d(TAG, getString(R.string.service_observer_message));
            updateUI(s);
        }); ==> When liveDataService changes we update the UI

Maintenant, je veux faire la même chose pour Swift / IOS

Je vois la fonction

liveDataService.setValue(response); ==> updating the object with new data

Mais je ne peux pas l'attacher à un tableau qui obtient la mise à jour en arrière-plan uniquement pour NSObject

Quelle est la meilleure méthode pour accomplir cette tâche?

Merci Eran


0 commentaires

3 Réponses :


4
votes

Selon ce que je comprends, vous devez utiliser des notifications locales pour envoyer des données avec addObserver et postNotification pour y parvenir. trouver un exemple de code pour le même.

func receiveData(_ notification: NSNotification) {


if let image = notification.userInfo?["image"] as? UIImage {


}

}

// publier une notification

 NotificationCenter.default.addObserver(self, selector: #selector(self.receiveData(_:)), name: NSNotification.Name(rawValue: "notificationName"), object: nil)

// Inscrivez-vous pour recevoir une notification dans votre classe

  NotificationCenter.default.post(name: NSNotification.Name(rawValue: "notificationName"), object: nil, userInfo: imageData) 

// gérer la notification

 let imageData:[String: UIImage] = ["image": image]


0 commentaires

1
votes

Il existe plusieurs façons de procéder.

La solution la plus proche de votre solution Android devrait être l’observation des valeurs clés: https : //developer.apple.com/documentation/swift/cocoa_design_patterns/using_key-value_observing_in_swift

Si vous souhaitez en savoir plus sur ce sujet: https: / /www.swiftbysundell.com/posts/observers-in-swift-part-1


0 commentaires

3
votes

Vous pouvez utiliser la propriété didSet observe. Il répond lorsque la valeur de la propriété change.

var dataArray  = [String]() {
    didSet {
        print(“Array Count = \(dataArray.count)”)
    }
}

lorsque vous ajoutez des données dans dataArray, il appelle la propriété dataArray observer et imprimer le nombre de tableaux


0 commentaires