Sobes.tech
Junior

Kokius duomenų perdavimo būdus žinote?

sobes.tech AI

Atsakymas iš AI

  • Savybės ir inicializatoriai: Duomenų perdavimas per savybes ir inicializatorius kuriant objektą.
  • Segues (Storyboards): Duomenų perdavimas tarp View Controller'ių navigacijos metu naudojant prepare(for:sender:).
  • Delegation: Protokolo įgyvendinimas, leidžiantis vienam objektui (delegatui) gauti pranešimus ir duomenis iš kito objekto.
  • NotificationCenter: Publish-Subscribe mechanizmas plačiam pranešimų siuntimui su bet kokiais duomenimis.
  • Key-Value Observing (KVO): Mechanizmas stebėti objektų savybių pokyčius.
  • Closures/Callbacks: Duomenų perdavimas per uždarymus, kurie vykdomi asinchroniškai arba po tam tikro įvykio.
  • Singletons: Bendra klasės egzempliorius, prieinamas iš bet kurios vietos programoje, duomenų saugojimui ir keitimui.
  • User Defaults: Mažo kiekio naudotojo duomenų saugojimas nuolatiniame saugykloje.
  • Core Data/Realm/SQLite: Struktūruotų duomenų saugojimas ir valdymas įrenginyje.
  • File Storage: Duomenų išsaugojimas failuose diske (pvz., dokumentai, paveikslėliai).
  • CloudKit: Debesų paslauga duomenų saugojimui ir sinchronizacijai tarp įrenginių per iCloud.
  • Networking (APIs): Duomenų perdavimas tarp programos ir serverio per tinklą.
  • Environment Objects (SwiftUI): Objektų teikimas, kurie bendrinami hierarchijoje.
  • State Objects (SwiftUI): Vietinio būsenos valdymas.
  • Observed Objects (SwiftUI): Objektų valdymas, į kuriuos prenumeruojama.

Pavyzdys naudojant Segues:

// Pagrindiniame View Controller
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"
        }
    }
}

Pavyzdys naudojant Delegation:

// Delegato protokolas
protocol DataDelegate: AnyObject {
    func didReceiveData(_ data: String)
}

// Duomenis siunčianti klasė
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

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

// Duomenis gaunanti klasė
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Received data: \(data)")
    }
}

Pavyzdys naudojant NotificationCenter:

// Pranešimo siuntimas
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Data from NotificationCenter"])

// Pranešimo gavimas
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)")
    }
}

// Nepamirškite pašalinti stebėtojo
deinit {
    NotificationCenter.default.removeObserver(self)
}