Sobes.tech
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-Subscribe za š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)
}