Junior
Milliseid andmeedastamise viise tead?
sobes.tech AI
Vastus AI-lt
- Omadused (Properties):
- Initsialiseerimisel (initializer injection).
- Pärast initsialiseerimist määramine.
class ViewController: UIViewController { var data: String? // Andmete edastamine omaduse kaudu } - Delegaadid (Delegation):
- Protokoll meetoditega sündmuste teavitamiseks ja andmete edastamiseks.
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("Saadud andmed: \(data)") } } - Lõppkoodid (Closures) / Tagasiside (Callbacks):
- Funktsiooni edastamine, mis kutsutakse teises kohas.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Data via closure") } } - NotificationCenter:
- Avaldamise ja tellimise mehhanism laiaulatuslike teavituste jaoks.
// Saatja NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Data from Notification"]) // Vastuvõtja 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("Saadud teavitus: \(data)") } } - Singleton / Ühine näide:
- Ainsana olemasolev eksemplar, mis on globaalselt kättesaadav.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Keelab teiste eksemplaride loomise } // Kasutamine DataManager.shared.sharedData = "Data from Singleton" print(DataManager.shared.sharedData) - Võtme-Väärtuse jälgimine (KVO):
- Mehhanism objektide omaduste muutuste jälgimiseks.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Omadus peab olema `@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äärtus muutus: \(newValue)") } } } } - Core Data / Realm / Muud andmebaasid:
- Püsivaks salvestamiseks ja andmete vahetamiseks kontrollereid ja ekraane vahel.
- Mediator Muster:
- Objekt, mis haldab teiste objektide vahelist suhtlust.
- Binding reaktiivse programmeerimisega (RxSwift, Combine):
- Andmete edastamine voogude (streams) või väljaandjate (publishers) kaudu.
// Näide Combine'iga import Combine let publisher = PassthroughSubject<String, Never>() // Tellija let subscriber = publisher.sink { receivedValue in print("Saadud väärtus Combine'iga: \(receivedValue)") } // Saatja publisher.send("Data from Combine") - Kasutaja eelistused (User Defaults):
- Väikeste ja lihtsate andmete salvestamiseks, mis on globaalselt kättesaadavad.
UserDefaults.standard.set("User Name", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - SwiftUI keskkonnaobjektid (Environment Objects):
- Sõltuvuste edastamiseks allapoole SwiftUI vaadete hierarhias.
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) } }