Junior
Ce metode de transmitere a datelor cunoști?
sobes.tech AI
Răspuns de la AI
- Proprietăți (Properties):
- La inițializare (injecție prin initializer).
- Atribuire după inițializare.
class ViewController: UIViewController { var data: String? // Transmiterea datelor prin proprietate } - Delegări (Delegation):
- Protocol cu metode pentru notificări despre evenimente și transmiterea datelor.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Salut de la Sender") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Date primite: \(data)") } } - Closure-uri / Callbacks:
- Transmiterea unei funcții care va fi apelată în altă parte.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Date via closure") } } - NotificationCenter:
- Mechanism de publicare și abonare pentru notificări broadcast.
// Sender NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Date din Notification"]) // Receiver 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("Date notificare primite: \(data)") } } - Singleton / Instanță partajată:
- O singură instanță a unei clase, accesibilă global.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Interzice crearea altor instanțe } // Utilizare DataManager.shared.sharedData = "Date din Singleton" print(DataManager.shared.sharedData) - Observarea valorilor cheie (KVO):
- Mechanism pentru observarea modificărilor proprietăților obiectelor.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Proprietate trebuie să fie `@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("Valoare schimbată în: \(newValue)") } } } } - Core Data / Realm / Alte baze de date:
- Pentru stocare persistentă și schimb de date între controllere și ecrane.
- Mediator Pattern:
- Obiect care gestionează interacțiunea între alte obiecte.
- Binding cu Programare Reacționară (RxSwift, Combine):
- Transmiterea datelor prin fluxuri (streams) sau publisheri.
// Exemplu cu Combine import Combine let publisher = PassthroughSubject<String, Never>() // Abonat let subscriber = publisher.sink { receivedValue in print("Valoare primită prin Combine: \(receivedValue)") } // Expeditor publisher.send("Date din Combine") - User Defaults:
- Pentru salvarea unui număr mic de date simple, accesibile global.
UserDefaults.standard.set("Nume Utilizator", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Variabile de mediu (Environment Objects) în SwiftUI:
- Pentru transmiterea dependențelor în jos pe ierarhia de vizualizări în SwiftUI.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Mesaj inițial" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }