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-Subscribemechanizmas 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)
}