Junior
Kādus datu pārraides veidus pazīsti?
sobes.tech AI
Atbilde no AI
- Īpašības (Properties):
- Iniciācijas laikā (initializer injection).
- Pēc iniciācijas piešķiršana.
class ViewController: UIViewController { var data: String? // Datu nodošana caur īpašību } - Ģeneratori (Delegates):
- Protokols ar metodēm notikumu paziņošanai un datu nodošanai.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Hello from Sender") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Saņemti dati: \(data)") } } - Aizvērēji (Closures) / Atgriezeniskās saites (Callbacks):
- Funkcijas nodošana, kas tiks izsaukta citur.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Data via closure") } } - NotificationCenter:
- Publikācijas un abonēšanas mehānisms plašsaziņas paziņojumiem.
// Sūtītājs NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Data from Notification"]) // Saņēmējs 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("Saņemts paziņojums: \(data)") } } - Sākotnējais / Kopīgais instances:
- Viena instance, kas ir pieejama globāli.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Aizliedz citu instance izveidi } // Lietošana DataManager.shared.sharedData = "Data from Singleton" print(DataManager.shared.sharedData) - Key-Value novērošana (KVO):
- Mehānisms, kas novēro objektu īpašību izmaiņas.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Īpašībai jā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("Vērtība mainījās uz: \(newValue)") } } } } - Core Data / Realm / Citas datu bāzes:
- Uzglabāšanai un datu apmaiņai starp kontrolieriem un ekrāniem.
- Mediator (Starpnieks) modelis:
- Objekts, kas pārvalda mijiedarbību starp citiem objektiem.
- Binding ar reaktīvo programmēšanu (RxSwift, Combine):
- Datu nodošana caur straumēm (streams) vai publicētājiem (publishers).
// Combine piemērs import Combine let publisher = PassthroughSubject<String, Never>() // Abonents let subscriber = publisher.sink { receivedValue in print("Saņemta vērtība caur Combine: \(receivedValue)") } // Sūtītājs publisher.send("Data from Combine") - Lietotāja noklusējumi (User Defaults):
- Mazāku un vienkāršu datu glabāšanai, kas ir pieejami globāli.
UserDefaults.standard.set("User Name", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - SwiftUI vide (Environment Objects):
- Datu nodošanai uz leju pa SwiftUI skatu hierarhiju.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Initial message" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }