Junior
Jakie metody przesyłania danych znasz?
sobes.tech AI
Odpowiedź od AI
- Właściwości:
- Podczas inicjalizacji (wstrzykiwanie przez inicjator).
- Przypisanie po inicjalizacji.
class ViewController: UIViewController { var data: String? // Przesyłanie danych przez właściwość } - Delegaty:
- Protokół z metodami do powiadamiania o zdarzeniach i przesyłania danych.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Wiadomość od nadawcy") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Odebrane dane: \(data)") } } - Zamykanie (Closures) / Wywołania zwrotne (Callbacks):
- Przesyłanie funkcji, która zostanie wywołana gdzie indziej.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Dane przez zamknięcie") } } - NotificationCenter:
- Mechanizm publikacji i subskrypcji dla powiadomień szerokiego zasięgu.
// Nadawca NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Dane z powiadomienia"]) // Odbiorca 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("Odebrane dane powiadomienia: \(data)") } } - Singleton / Wspólna instancja:
- Jedyna instancja klasy, dostępna globalnie.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Zabrania tworzenia innych instancji } // Użycie DataManager.shared.sharedData = "Dane z Singleton" print(DataManager.shared.sharedData) - Obserwacja klucz-wartość (KVO):
- Mechanizm do obserwowania zmian właściwości obiektów.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Właściwość musi być `@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("Wartość zmieniona na: \(newValue)") } } } } - Core Data / Realm / Inne bazy danych:
- Do trwałego przechowywania i wymiany danych między kontrolerami i ekranami.
- Wzorzec Mediator:
- Obiekt zarządzający interakcją między innymi obiektami.
- Binding z Programowaniem Reaktywnym (RxSwift, Combine):
- Przesyłanie danych przez strumienie (streams) lub wydawców (publishers).
// Przykład z Combine import Combine let publisher = PassthroughSubject<String, Never>() // Subskrybent let subscriber = publisher.sink { receivedValue in print("Odebrana wartość przez Combine: \(receivedValue)") } // Nadawca publisher.send("Dane z Combine") - Ustawienia użytkownika (User Defaults):
- Do zapisywania małych, prostych danych, dostępnych globalnie.
UserDefaults.standard.set("Nazwa użytkownika", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Zmienne środowiskowe (Environment Objects) w SwiftUI:
- Do przekazywania zależności w dół hierarchii widoków w SwiftUI.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Wstępne wiadomości" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }