Sobes.tech
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)  
        }  
    }