Sobes.tech
Junior

Quelles méthodes de transmission de données connais-tu?

sobes.tech IA

Réponse de l'IA

  • Propriétés :
    • Lors de l'initialisation (injection par initialiseur).
    • Attribution après l'initialisation.
    class ViewController: UIViewController {  
        var data: String? // Transfert de données via propriété  
    }  
    
  • Délégués :
    • Protocole avec des méthodes pour notifier des événements et transférer des données.
    protocol DataDelegate: AnyObject {  
        func didReceiveData(data: String)  
    }  
    
    class SenderViewController: UIViewController {  
        weak var delegate: DataDelegate?  
    
        func sendData() {  
            delegate?.didReceiveData(data: "Bonjour de l'expéditeur")  
        }  
    }  
    
    class ReceiverViewController: UIViewController, DataDelegate {  
        func didReceiveData(data: String) {  
            print("Données reçues : \(data)")  
        }  
    }  
    
  • Closures / Callbacks :
    • Transfert de fonction qui sera appelée ailleurs.
    class SenderViewController: UIViewController {  
        var completionHandler: ((String) -> Void)?  
    
        func sendData() {  
            completionHandler?("Données via closure")  
        }  
    }  
    
  • NotificationCenter :
    • Mécanisme de publication et d'abonnement pour notifications broadcast.
    // Émetteur  
    NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Données de la notification"])  
    
    // Récepteur  
    NotificationCenter.default.addObserver(self, selector: #selector(didReceiveNotification(_:)), name: NSNotification.Name("DataNotification"), object: nil)  
    
    @objc func didReceiveNotification(_ notification: Notification) {  
        if let data = notification.userInfo?["data"] as? String {  
            print("Données de la notification reçues : \(data)")  
        }  
    }  
    
  • Singleton / Instance partagée :
    • Unique instance de la classe, accessible globalement.
    class DataManager {  
        static let shared = DataManager()  
        var sharedData: String?  
        private init() {} // Interdire la création d'autres instances  
    }  
    
    // Utilisation  
    DataManager.shared.sharedData = "Données du Singleton"  
    print(DataManager.shared.sharedData)  
    
  • Observation Key-Value (KVO) :
    • Mécanisme pour observer les changements de propriétés d'objets.
    class MyObservableObject: NSObject {  
        @objc dynamic var value: String = "" // La propriété doit être `@objc dynamic`  
    }  
    
    class Observer: NSObject {  
        var observation: NSKeyValueObservation?  
    
        func startObserving(object: MyObservableObject) {  
            observation = object.observe(\.value, options: [.new]) { observedObject, change in  
                if let newValue = change.newValue {  
                    print("Valeur changée en : \(newValue)")  
                }  
            }  
        }  
    }  
    
  • Core Data / Realm / Autres bases de données :
    • Pour stockage persistant et échange de données entre contrôleurs et écrans.
  • Médiateur (Pattern Mediator) :
    • Objet qui gère l'interaction entre autres objets.
  • Binding avec Programmation Réactive (RxSwift, Combine) :
    • Transfert de données via des flux (streams) ou des éditeurs (publishers).
    // Exemple avec Combine  
    import Combine  
    
    let publisher = PassthroughSubject<String, Never>()  
    
    // Abonné  
    let subscriber = publisher.sink { receivedValue in  
        print("Valeur reçue via Combine : \(receivedValue)")  
    }  
    
    // Émetteur  
    publisher.send("Données de Combine")  
    
  • User Defaults :
    • Pour sauvegarder de petites données simples, accessibles globalement.
    UserDefaults.standard.set("Nom d'utilisateur", forKey: "userName")  
    let userName = UserDefaults.standard.string(forKey: "userName")  
    
  • Variables d'environnement (Environment Objects) en SwiftUI :
    • Pour transmettre des dépendances vers le bas dans la hiérarchie des vues en SwiftUI.
    import SwiftUI  
    
    class AppData: ObservableObject {  
        @Published var message: String = "Message initial"  
    }  
    
    struct ContentView: View {  
        @EnvironmentObject var appData: AppData  
    
        var body: some View {  
            Text(appData.message)  
        }  
    }