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