Junior
Ποιους τρόπους μετάδοσης δεδομένων γνωρίζεις;
sobes.tech AI
Απάντηση από AI
- Ιδιότητες (Properties):
- Κατά την αρχικοποίηση (εισαγωγή μέσω αρχικοποιητή).
- Ανάθεση μετά την αρχικοποίηση.
class ViewController: UIViewController { var data: String? // Μεταβίβαση δεδομένων μέσω ιδιότητας } - Αντιπρόσωποι (Delegation):
- Πρωτόκολλο με μεθόδους για ειδοποιήσεις σχετικά με γεγονότα και μεταφορά δεδομένων.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Γειά από τον αποστολέα") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Ληφθέντα δεδομένα: \(data)") } } - Κλεισίματα (Closures) / Callbacks:
- Μεταφορά λειτουργίας που θα κληθεί σε άλλο σημείο.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Δεδομένα μέσω κλεισίματος") } } - NotificationCenter:
- Μηχανισμός δημοσίευσης και εγγραφής για ευρείας κλίμακας ειδοποιήσεις.
// Αποστολέας NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Δεδομένα από την ειδοποίηση"]) // Παραλήπτης 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("Ληφθέντα δεδομένα ειδοποίησης: \(data)") } } - Μονάδα / Κοινόχρηστης Περίπτωση:
- Μόνο ένα αντίγραφο της κλάσης, διαθέσιμο παγκοσμίως.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Απαγορεύει τη δημιουργία άλλων αντιγράφων } // Χρήση DataManager.shared.sharedData = "Δεδομένα από το Singleton" print(DataManager.shared.sharedData) - Παρατήρηση τιμών-κλειδιών (KVO):
- Μηχανισμός για την παρακολούθηση αλλαγών στις ιδιότητες αντικειμένων.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Η ιδιότητα πρέπει να είναι `@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("Τιμή άλλαξε σε: \(newValue)") } } } } - Core Data / Realm / Άλλες βάσεις δεδομένων:
- Για διατηρητική αποθήκευση και ανταλλαγή δεδομένων μεταξύ ελεγκτών και οθονών.
- Mediator Pattern:
- Αντικείμενο που διαχειρίζεται την αλληλεπίδραση μεταξύ άλλων αντικειμένων.
- Binding με Αντιδραστικό Προγραμματισμό (RxSwift, Combine):
- Μεταφορά δεδομένων μέσω ροών (streams) ή εκδότες (publishers).
// Παράδειγμα με Combine import Combine let publisher = PassthroughSubject<String, Never>() // Συνδρομητής let subscriber = publisher.sink { receivedValue in print("Ληφθείσα τιμή μέσω Combine: \(receivedValue)") } // Αποστολέας publisher.send("Δεδομένα από το Combine") - User Defaults:
- Για αποθήκευση μικρής ποσότητας απλών δεδομένων, διαθέσιμων παγκοσμίως.
UserDefaults.standard.set("Όνομα χρήστη", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Μεταβλητές περιβάλλοντος (Environment Objects) στο SwiftUI:
- Για μεταφορά εξαρτήσεων προς τα κάτω στην ιεραρχία των προβολών στο SwiftUI.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Αρχικό μήνυμα" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }