Sobes.tech
Junior

Quelles méthodes de transmission de données connaissez-vous?

sobes.tech IA

Réponse de l'IA

  • Propriétés et initialisateurs : Transfert de données via des propriétés et des initialisateurs lors de la création d'un objet.
  • Segues (pour Storyboards) : Transfert de données entre View Controllers lors de la navigation en utilisant prepare(for:sender:).
  • Délégation : Mise en œuvre d'un protocole permettant à un objet (délégué) de recevoir des notifications et des données d'un autre objet.
  • NotificationCenter : Mécanisme de publication-abonnement pour diffuser des notifications avec des données arbitraires.
  • Observation de valeur clé (KVO) : Mécanisme pour observer les changements dans les propriétés des objets.
  • Closures/Callbacks : Transfert de données via des fermetures qui s'exécutent de manière asynchrone ou après un événement spécifique.
  • Singletons : Instance partagée d'une classe, accessible depuis n'importe quelle partie de l'application, pour stocker et échanger des données.
  • User Defaults : Stockage de petits volumes de données utilisateur dans un stockage persistant.
  • Core Data/Realm/SQLite : Stockage et gestion de données structurées sur l'appareil.
  • File Storage : Enregistrement de données dans des fichiers sur le disque (par exemple, documents, images).
  • CloudKit : Service cloud pour stocker et synchroniser des données entre appareils iCloud.
  • Networking (APIs) : Transfert de données entre l'application et le serveur via le réseau.
  • Environment Objects (SwiftUI) : Fourniture d'objets partagés dans la hiérarchie des vues.
  • State Objects (SwiftUI) : Gestion de l'état local de la vue.
  • Observed Objects (SwiftUI) : Gestion des objets auxquels la vue est abonnée.

Exemple d'utilisation de Segues :

// Dans le View Controller d'origine
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail" {
        if let destinationVC = segue.destination as? DetailViewController {
            destinationVC.dataToReceive = "Bonjour de la VC source"
        }
    }
}

Exemple d'utilisation de la délégation :

// Protocole du délégué
protocol DataDelegate: AnyObject {
    func didReceiveData(_ data: String)
}

// Classe qui envoie des données
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

    func sendData() {
        delegate?.didReceiveData("Données envoyées via délégué")
    }
}

// Classe qui reçoit des données
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Données reçues : \(data)")
    }
}

Exemple d'utilisation de NotificationCenter :

// Envoi de notification
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Données de NotificationCenter"])

// Réception de notification
NotificationCenter.default.addObserver(self, selector: #selector(handleDataNotification(_:)), name: Notification.Name("myDataNotification"), object: nil)

@objc func handleDataNotification(_ notification: Notification) {
    if let receivedData = notification.userInfo?["dataKey"] as? String {
        print("Données reçues : \(receivedData)")
    }
}

// N'oubliez pas de supprimer l'observateur
deinit {
    NotificationCenter.default.removeObserver(self)
}