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-Subscribena š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)
}