Junior
Koje načine prenosa podataka poznaješ?
sobes.tech АИ
Одговор од АИ
- Svojstva (Properties):
- Pri inicijalizaciji (injektovanje putem konstruktora).
- Dodeljivanje nakon inicijalizacije.
class ViewController: UIViewController { var data: String? // Prenos podataka putem svojstva } - Delegati (Delegation):
- Protokol sa metodama za obaveštavanje o događajima i prenos podataka.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Zdravo od Sender") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Primljeni podaci: \(data)") } } - Zatvaranja (Closures) / Callback-ovi:
- Prenos funkcije koja će biti pozvana na drugom mestu.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Podaci putem zatvaranja") } } - NotificationCenter:
- Mehanizam za objavljivanje i pretplatu za široko emitovana obaveštenja.
// Pošiljalac NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Podaci iz obaveštenja"]) // Primaoc 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("Primljeni podaci obaveštenja: \(data)") } } - Singleton / Deljena instanca:
- Jedinstvena instanca klase, dostupna globalno.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Zabrana kreiranja drugih instanci } // Upotreba DataManager.shared.sharedData = "Podaci iz singleton-a" print(DataManager.shared.sharedData) - Praćenje vrednosti po ključu (KVO):
- Mehanizam za praćenje promena svojstava objekata.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Svojstvo mora biti `@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("Vrednost promenjena u: \(newValue)") } } } } - Core Data / Realm / Ostale baze podataka:
- Za trajno skladištenje i razmenu podataka između kontrolera i ekrana.
- Mediator Pattern:
- Objekat koji upravlja interakcijom između drugih objekata.
- Binding sa reaktivnim programiranjem (RxSwift, Combine):
- Prenos podataka putem tokova (streams) ili izdavača (publishers).
// Primer sa Combine import Combine let publisher = PassthroughSubject<String, Never>() // Pretplatnik let subscriber = publisher.sink { receivedValue in print("Primljena vrednost putem Combine: \(receivedValue)") } // Pošiljalac publisher.send("Podaci iz Combine") - Korisnički podaci (User Defaults):
- Za čuvanje male količine jednostavnih podataka, dostupnih globalno.
UserDefaults.standard.set("Korisničko ime", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Objekti okruženja (Environment Objects) u SwiftUI:
- Za prenos zavisnosti naniže kroz hijerarhiju prikaza u SwiftUI.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Početna poruka" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }