Sobes.tech
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)  
        }  
    }