Junior
Milyen adatátviteli módszereket ismersz?
sobes.tech MI
Válasz az MI-től
- Tulajdonságok (Properties):
- Inicializáláskor (konstruktor injektálás).
- Inicializálás után hozzárendelés.
class ViewController: UIViewController { var data: String? // Adatok átadása tulajdonságon keresztül } - Delegátok (Delegation):
- Protokoll eseményekről való értesítésre és adatok átadására.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Sender-től üdvözlet") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Fogadott adatok: \(data)") } } - Zárójelek (Closures) / Callback-ek:
- Függvény átadása, amelyet egy másik helyen hívnak meg.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Adatok zárójelben") } } - NotificationCenter:
- Közzétételi és feliratkozási mechanizmus széles körű értesítésekhez.
// Küldő NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Adatok a Notification-ből"]) // Címzett 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("Beérkező értesítési adatok: \(data)") } } - Singleton / Megosztott példány:
- Csak egy példány az osztályból, globálisan elérhető.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Más példányok létrehozásának tiltása } // Használat DataManager.shared.sharedData = "Singletonból származó adatok" print(DataManager.shared.sharedData) - Kulcs-érték megfigyelés (KVO):
- Mechanizmus az objektum tulajdonságainak változásainak figyelésére.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Tulajdonság `@objc dynamic` kell legyen } 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("Érték változott: \(newValue)") } } } } - Core Data / Realm / Egyéb adatbázisok:
- Tartós tárolás és adatcsere kontrollerek és képernyők között.
- Mediator minta:
- Objektum, amely kezeli a kölcsönhatást más objektumok között.
- Reaktív programozással kötés (RxSwift, Combine):
- Adatok átadása csatornákon (streams) vagy kiadók (publishers) segítségével.
// Combine példával import Combine let publisher = PassthroughSubject<String, Never>() // Előfizető let subscriber = publisher.sink { receivedValue in print("Kaptunk értéket a Combine segítségével: \(receivedValue)") } // Küldő publisher.send("Adatok a Combine-ból") - Felhasználói alapértelmezések:
- Kis mennyiségű egyszerű adatok globális tárolására.
UserDefaults.standard.set("Felhasználónév", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Környezeti objektumok (Environment Objects) SwiftUI-ben:
- Függőségek lefelé történő átadása a SwiftUI nézethierarchiában.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Kezdeti üzenet" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }