Junior
Welke manieren van gegevensoverdracht ken je?
sobes.tech AI
Antwoord van AI
- Eigenschappen (Properties):
- Bij initialisatie (initializer injectie).
- Toewijzing na initialisatie.
class ViewController: UIViewController { var data: String? // Gegevens doorgeven via eigenschap } - Delegates (Delegation):
- Protocol met methoden voor notificaties over gebeurtenissen en gegevensoverdracht.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Hallo van Sender") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Ontvangen data: \(data)") } } - Closures / Callbacks:
- Functie doorgeven die op een andere plek wordt aangeroepen.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Data via closure") } } - NotificationCenter:
- Publicatie- en abonnementsmechanisme voor broadcast notificaties.
// Sender NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Data van Notification"]) // Receiver 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("Ontvangen notificatie data: \(data)") } } - Singleton / Gedeelde instantie:
- Enkele instantie van een klasse, wereldwijd toegankelijk.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Verbied het maken van andere instanties } // Gebruik DataManager.shared.sharedData = "Data van Singleton" print(DataManager.shared.sharedData) - Key-Value Observing (KVO):
- Mechanisme om veranderingen in eigenschappen van objecten te observeren.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Eigenschap moet `@objc dynamic` zijn } 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("Waarde veranderd naar: \(newValue)") } } } } - Core Data / Realm / Andere databases:
- Voor persistente opslag en gegevensuitwisseling tussen controllers en schermen.
- Mediator Pattern:
- Object dat de interactie tussen andere objecten beheert.
- Binding met Reactive Programming (RxSwift, Combine):
- Gegevens doorgeven via streams of publishers.
// Voorbeeld met Combine import Combine let publisher = PassthroughSubject<String, Never>() // Abonnee let subscriber = publisher.sink { receivedValue in print("Ontvangen waarde via Combine: \(receivedValue)") } // Verzender publisher.send("Data van Combine") - User Defaults:
- Voor het opslaan van kleine hoeveelheden eenvoudige gegevens, wereldwijd toegankelijk.
UserDefaults.standard.set("Gebruikersnaam", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Omgevingsvariabelen (Environment Objects) in SwiftUI:
- Voor het doorgeven van afhankelijkheden naar beneden in de hiërarchie van views in SwiftUI.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Initiële boodschap" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }