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
3 Réponses :
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]
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
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