Junior
Kokius duomenų perdavimo būdus žinai?
sobes.tech AI
Atsakymas iš AI
- Savybės (Properties):
- Inicijavimo metu (initializer injection).
- Po inicijavimo priskyrimas.
class ViewController: UIViewController { var data: String? // Duomenų perdavimas per savybę } - Delegatai (Delegation):
- Protokolas su metodais įvykių pranešimui ir duomenų perdavimui.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Hello from Sender") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Gauta duomenys: \(data)") } } - Uždarymai (Closures) / Atgalinis ryšys (Callbacks):
- Funkcijos perdavimas, kuri bus iškviesta kitur.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Data via closure") } } - NotificationCenter:
- Leidžia publikuoti ir prenumeruoti pranešimus.
// Siuntėjas NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Data from Notification"]) // Gavimo pavyzdys NotificationCenter.default.addObserver(self, selector: #selector(didReceiveNotification(_:)), name: NSNotification.Name("DataNotification"), object: nil) @objc func didReceiveNotification(_ notification: Notification) { if let data = notification.userInfo?["data"] as? String { print("Gauta pranešimo informacija: \(data)") } } - Singleton / Bendrasis pavyzdys:
- Vienas egzempliorius, prieinamas globaliai.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Draudžiama kurti kitus egzempliorius } // Naudojimas DataManager.shared.sharedData = "Data from Singleton" print(DataManager.shared.sharedData) - Krypties stebėjimas (KVO):
- Mechanizmas stebėti objekto savybių pokyčius.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Savybė turi būti `@objc dynamic` } class Observer: NSObject { var observation: NSKeyValueObservation? func startObserving(object: MyObservableObject) { observation = object.observe(\.value, options: [.new]) { observedObject, change in if let newValue = change.newValue { print("Reikšmė pasikeitė į: \(newValue)") } } } } - Core Data / Realm / Kitos duomenų bazės:
- Tarp kontrolerių ir ekranų duomenų saugojimui ir mainams.
- Mediator (Tarpininkas) modelis:
- Objektas, valdantis sąveiką tarp kitų objektų.
- Binding naudojant reaktyvų programavimą (RxSwift, Combine):
- Duomenų perdavimas per srautus (streams) arba leidėjus (publishers).
// Pavyzdys su Combine import Combine let publisher = PassthroughSubject<String, Never>() // Prenumeratorius let subscriber = publisher.sink { receivedValue in print("Gautas reikšmė per Combine: \(receivedValue)") } // Siuntėjas publisher.send("Data from Combine") - Naudotojo nustatymai (User Defaults):
- Mažų ir paprastų duomenų saugojimui, kurie yra prieinami globaliai.
UserDefaults.standard.set("User Name", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - SwiftUI aplinkos objektai (Environment Objects):
- Duomenų perdavimui žemyn per SwiftUI vaizdų hierarchiją.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Initial message" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }