Junior
Jaké způsoby přenosu dat znáš?
sobes.tech AI
Odpověď od AI
- Vlastnosti (Properties):
- Při inicializaci (injektáž přes inicializátor).
- Přiřazení po inicializaci.
class ViewController: UIViewController { var data: String? // Přenos dat přes vlastnost } - Delegáti (Delegation):
- Protokol s metodami pro oznámení o událostech a přenos dat.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Ahoj od odesílatele") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Přijatá data: \(data)") } } - Uzávěry (Closures) / Callbacky:
- Přenos funkce, která bude volána jinde.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Data přes uzávěr") } } - NotificationCenter:
- Mechanismus publikace a předplatného pro vysílání oznámení.
// Odesílatel NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Data z oznámení"]) // Příjemce 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("Přijatá data oznámení: \(data)") } } - Singleton / Sdílená instance:
- Jediná instance třídy, dostupná globálně.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Zabraňuje tvorbě dalších instancí } // Použití DataManager.shared.sharedData = "Data ze singletonu" print(DataManager.shared.sharedData) - Pozorování hodnot klíčů (KVO):
- Mechanismus sledování změn vlastností objektů.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Vlastnost musí být `@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("Hodnota změněna na: \(newValue)") } } } } - Core Data / Realm / Jiné databáze:
- Pro perzistentní ukládání a výměnu dat mezi controllery a obrazovkami.
- Mediator Pattern:
- Objekt, který řídí interakci mezi jinými objekty.
- Binding s reaktivním programováním (RxSwift, Combine):
- Přenos dat přes proudy (streams) nebo vydavatele (publishers).
// Příklad s Combine import Combine let publisher = PassthroughSubject<String, Never>() // Odběratel let subscriber = publisher.sink { receivedValue in print("Přijatá hodnota přes Combine: \(receivedValue)") } // Odesílatel publisher.send("Data z Combine") - Uživatelské výchozí hodnoty (User Defaults):
- Pro ukládání malého množství jednoduchých dat, dostupných globálně.
UserDefaults.standard.set("Uživatelské jméno", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Prostředí objekty (Environment Objects) ve SwiftUI:
- Pro předávání závislostí dolů po hierarchii pohledů ve SwiftUI.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Počáteční zpráva" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }