Sobes.tech
Junior

Jaké způsoby přenosu dat znáte?

sobes.tech AI

Odpověď od AI

  • Vlastnosti a inicializátory: Přenos dat přes vlastnosti a inicializátory při vytváření objektu.
  • Segues (pro Storyboards): Přenos dat mezi View Controllery při navigaci pomocí prepare(for:sender:).
  • Delegování: Implementace protokolu, který umožňuje jednomu objektu (delegátovi) přijímat oznámení a data od jiného objektu.
  • NotificationCenter: Mechanismus Publish-Subscribe pro široké rozesílání oznámení s libovolnými daty.
  • Key-Value Observing (KVO): Mechanismus sledování změn vlastností objektů.
  • Closures/Callbacks: Přenos dat přes uzávěry, které se vykonávají asynchronně nebo po určité události.
  • Singletons: Společný výtisk třídy, dostupný odkudkoli v aplikaci, pro ukládání a výměnu dat.
  • User Defaults: Uložení malého objemu uživatelských dat do trvalého úložiště.
  • Core Data/Realm/SQLite: Ukládání a správa strukturovaných dat na zařízení.
  • File Storage: Ukládání dat do souborů na disku (například dokumenty, obrázky).
  • CloudKit: Cloudová služba pro ukládání a synchronizaci dat mezi zařízeními přes iCloud.
  • Networking (APIs): Přenos dat mezi aplikací a serverem přes síť.
  • Environment Objects (SwiftUI): Poskytování objektů sdílených v hierarchii pohledů.
  • State Objects (SwiftUI): Správa lokálního stavu pohledu.
  • Observed Objects (SwiftUI): Správa objektů, na které je přihlášena představa.

Příklad použití Segues:

// V původním View Controlleru
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"
        }
    }
}

Příklad použití Delegation:

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

// Třída, která odesílá data
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

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

// Třída, která přijímá data
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Received data: \(data)")
    }
}

Příklad použití NotificationCenter:

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

// Přijímání oznámení
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)")
    }
}

// Nezapomeň odstranit pozorovatele
deinit {
    NotificationCenter.default.removeObserver(self)
}