Junior
Welche Methoden der Datenübertragung kennst du?
sobes.tech KI
Antwort von AI
- Eigenschaften:
- Bei der Initialisierung (Injektionsmethode).
- Zuweisung nach der Initialisierung.
class ViewController: UIViewController { var data: String? // Datenübertragung über die Eigenschaft } - Delegaten:
- Protokoll mit Methoden zur Benachrichtigung über Ereignisse und Datenübertragung.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Hallo vom Sender") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Empfangene Daten: \(data)") } } - Closures / Callbacks:
- Übergabe einer Funktion, die an anderer Stelle aufgerufen wird.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Daten via Closure") } } - NotificationCenter:
- Mechanismus zur Veröffentlichung und Abonnierung für Broadcast-Benachrichtigungen.
// Sender NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Daten aus der Benachrichtigung"]) // Empfänger 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("Empfangene Benachrichtigungsdaten: \(data)") } } - Singleton / Gemeinsame Instanz:
- Einzige Instanz der Klasse, global zugänglich.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Verhindert die Erstellung weiterer Instanzen } // Verwendung DataManager.shared.sharedData = "Daten vom Singleton" print(DataManager.shared.sharedData) - Key-Value-Beobachtung (KVO):
- Mechanismus zur Beobachtung von Änderungen an Eigenschaften von Objekten.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Die Eigenschaft muss `@objc dynamic` sein } 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("Wert geändert zu: \(newValue)") } } } } - Core Data / Realm / Andere Datenbanken:
- Für persistente Speicherung und Datenaustausch zwischen Controllern und Bildschirmen.
- Mediator-Muster:
- Objekt, das die Interaktion zwischen anderen Objekten steuert.
- Binding mit Reactive Programming (RxSwift, Combine):
- Datenübertragung durch Streams oder Publisher.
// Beispiel mit Combine import Combine let publisher = PassthroughSubject<String, Never>() // Abonnent let subscriber = publisher.sink { receivedValue in print("Empfangener Wert via Combine: \(receivedValue)") } // Sender publisher.send("Daten von Combine") - User Defaults:
- Für das Speichern kleiner, einfacher Daten, die global zugänglich sind.
UserDefaults.standard.set("Benutzername", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Umgebungsvariablen (Environment Objects) in SwiftUI:
- Um Abhängigkeiten nach unten in der Hierarchie der Views zu übertragen.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Initiale Nachricht" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }