Sobes.tech
Junior

Aké spôsoby prenosu dát poznáte?

sobes.tech AI

Odpoveď od AI

  • Vlastnosti a inicializátory: Prenos dát cez vlastnosti a inicializátory pri vytváraní objektu.
  • Segues (pre Storyboards): Prenos dát medzi View Controllers pri navigácii pomocou prepare(for:sender:).
  • Delegovanie: Implementácia protokolu, ktorý umožňuje jednému objektu (delegátovi) prijímať oznámenia a dáta od iného objektu.
  • NotificationCenter: Mechanizmus Publish-Subscribe na široké rozosielanie oznámení s ľubovoľnými dátami.
  • Key-Value Observing (KVO): Mechanizmus sledovania zmien vlastností objektov.
  • Closures/Callbacks: Prenos dát cez uzávery, ktoré sa vykonávajú asynchrónne alebo po určitom udalosti.
  • Singletons: Spoločný výtlačok triedy, dostupný odkiaľkoľvek v aplikácii, na ukladanie a výmenu dát.
  • User Defaults: Uloženie malého objemu používateľských dát do trvalého úložiska.
  • Core Data/Realm/SQLite: Ukladanie a správa štruktúrovaných dát na zariadení.
  • File Storage: Ukladanie dát do súborov na disku (napríklad dokumenty, obrázky).
  • CloudKit: Cloudová služba na ukladanie a synchronizáciu dát medzi zariadeniami cez iCloud.
  • Networking (APIs): Prenos dát medzi aplikáciou a serverom cez sieť.
  • Environment Objects (SwiftUI): Poskytovanie objektov, ktoré sa zdieľajú v hierarchii zobrazení.
  • State Objects (SwiftUI): Riadenie lokálneho stavu zobrazenia.
  • Observed Objects (SwiftUI): Riadenie objektov, na ktoré je prihlásená zobrazenie.

Príklad použitia Segues:

// V pôvodnom View Controlleri
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"
        }
    }
}

Príklad použitia Delegation:

// Protokol delegáta
protocol DataDelegate: AnyObject {
    func didReceiveData(_ data: String)
}

// Trieda, ktorá odosiela dáta
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

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

// Trieda, ktorá prijíma dáta
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Received data: \(data)")
    }
}

Príklad použitia NotificationCenter:

// Odoslanie oznámenia
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Data from NotificationCenter"])

// Prijímanie oznámenia
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)")
    }
}

// Nezabudnite odstrániť pozorovateľa
deinit {
    NotificationCenter.default.removeObserver(self)
}