Junior
Koje načine prenosa podataka poznajete?
sobes.tech АИ
Одговор од АИ
- Property i inicijalizatori: Prenos podataka putem svojstava i inicijalizatora prilikom kreiranja objekta.
- Segues (za Storyboards): Prenos podataka između View Controllera tokom navigacije korišćenjem
prepare(for:sender:). - Delegation: Implementacija protokola koji omogućava jednom objektu (delegatu) da prima obaveštenja i podatke od drugog objekta.
- NotificationCenter: Mehanizam
Publish-Subscribeza široko emitovanje obaveštenja sa proizvoljnim podacima. - Key-Value Observing (KVO): Mehanizam za posmatranje promena svojstava objekata.
- Closures/Callbacks: Prenos podataka putem zatvaranja koja se izvršavaju asinhrono ili nakon određenog događaja.
- Singletons: Zajednički primer klase, dostupan sa bilo kojeg mesta u aplikaciji, za skladištenje i razmenu podataka.
- User Defaults: Čuvanje malog obima korisničkih podataka u trajnom skladištu.
- Core Data/Realm/SQLite: Čuvanje i upravljanje strukturiranim podacima na uređaju.
- File Storage: Čuvanje podataka u fajlovima na disku (npr. dokumenti, slike).
- CloudKit: Oblak servis za čuvanje i sinhronizaciju podataka između uređaja putem iCloud.
- Networking (APIs): Prenos podataka između aplikacije i servera putem mreže.
- Environment Objects (SwiftUI): Objekti koji se dele u hijerarhiji prikaza.
- State Objects (SwiftUI): Upravljanje lokalnim stanjem prikaza.
- Observed Objects (SwiftUI): Upravljanje objektima na koje je prikaz pretplaćen.
Primer korišćenja Segues:
// U početnom View Controller-u
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"
}
}
}
Primer korišćenja Delegation:
// Protokol delegata
protocol DataDelegate: AnyObject {
func didReceiveData(_ data: String)
}
// Klasa koja šalje podatke
class SendingViewController: UIViewController {
weak var delegate: DataDelegate?
func sendData() {
delegate?.didReceiveData("Data sent via delegate")
}
}
// Klasa koja prima podatke
class ReceivingViewController: UIViewController, DataDelegate {
func didReceiveData(_ data: String) {
print("Received data: \(data)")
}
}
Primer korišćenja NotificationCenter:
// Slanje obaveštenja
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Data from NotificationCenter"])
// Prijem obaveštenja
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)")
}
}
// Ne zaboravite da uklonite posmatrača
deinit {
NotificationCenter.default.removeObserver(self)
}