Sobes.tech
Junior

Ποιους τρόπους μετάδοσης δεδομένων γνωρίζετε;

sobes.tech AI

Απάντηση από AI

  • Ιδιότητες και Αρχικοποιητές: Μεταφορά δεδομένων μέσω ιδιοτήτων και αρχικοποιητών κατά τη δημιουργία αντικειμένου.
  • Segues (για Storyboards): Μεταφορά δεδομένων μεταξύ View Controllers κατά τη πλοήγηση με χρήση του prepare(for:sender:).
  • Delegation: Υλοποίηση πρωτοκόλλου που επιτρέπει σε ένα αντικείμενο (delegate) να λαμβάνει ειδοποιήσεις και δεδομένα από άλλο αντικείμενο.
  • NotificationCenter: Μηχανισμός Publish-Subscribe για ευρεία αποστολή ειδοποιήσεων με τυχαία δεδομένα.
  • Key-Value Observing (KVO): Μηχανισμός παρακολούθησης αλλαγών σε ιδιότητες αντικειμένων.
  • Closures/Callbacks: Μεταφορά δεδομένων μέσω κλεισίματος που εκτελείται ασύγχρονα ή μετά την εμφάνιση ενός συγκεκριμένου γεγονότος.
  • Singletons: Κοινό στιγμιότυπο κλάσης, διαθέσιμο από οπουδήποτε στην εφαρμογή, για αποθήκευση και ανταλλαγή δεδομένων.
  • User Defaults: Αποθήκευση μικρού όγκου δεδομένων χρήστη σε μόνιμη αποθήκευση.
  • Core Data/Realm/SQLite: Αποθήκευση και διαχείριση δομημένων δεδομένων στη συσκευή.
  • File Storage: Αποθήκευση δεδομένων σε αρχεία στον δίσκο (π.χ. έγγραφα, εικόνες).
  • CloudKit: Υπηρεσία cloud για αποθήκευση και συγχρονισμό δεδομένων μεταξύ συσκευών μέσω iCloud.
  • Networking (APIs): Μεταφορά δεδομένων μεταξύ εφαρμογής και διακομιστή μέσω δικτύου.
  • Environment Objects (SwiftUI): Παροχή αντικειμένων που μοιράζονται σε ιεραρχία προβολών.
  • State Objects (SwiftUI): Διαχείριση τοπικής κατάστασης προβολής.
  • Observed Objects (SwiftUI): Διαχείριση αντικειμένων στα οποία έχει εγγραφεί η προβολή.

Παράδειγμα χρήσης Segues:

// Στον αρχικό View Controller
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail" {
        if let destinationVC = segue.destination as? DetailViewController {
            destinationVC.dataToReceive = "Hello from source VC"
        }
    }
}

Παράδειγμα χρήσης Delegation:

// Πρωτόκολλο delegate
protocol DataDelegate: AnyObject {
    func didReceiveData(_ data: String)
}

// Κλάση που στέλνει δεδομένα
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

    func sendData() {
        delegate?.didReceiveData("Data sent via delegate")
    }
}

// Κλάση που λαμβάνει δεδομένα
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Received data: \(data)")
    }
}

Παράδειγμα χρήσης NotificationCenter:

// Αποστολή ειδοποίησης
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Data from NotificationCenter"])

// Λήψη ειδοποίησης
NotificationCenter.default.addObserver(self, selector: #selector(handleDataNotification(_:)), name: Notification.Name("myDataNotification"), object: nil)

@objc func handleDataNotification(_ notification: Notification) {
    if let receivedData = notification.userInfo?["dataKey"] as? String {
        print("Received data: \(receivedData)")
    }
}

// Μην ξεχάσετε να αφαιρέσετε τον παρατηρητή
deinit {
    NotificationCenter.default.removeObserver(self)
}