Junior
Ի՞նչ տվյալների փոխանցման եղանակներ գիտես։
sobes.tech AI
Պատասխան AI-ից
- Արժեքներ (Properties):
- Ինիցիալիզացման ժամանակ (initializer injection):
- Հետո նշանակում (post-initialization assignment):
class ViewController: UIViewController { var data: String? // Տվյալների փոխանցում հատկության միջոցով } - Ներկայացուցիչներ (Delegates):
- Մեթոդներով պրոտոկոլ, որոնք տեղեկացնում են իրադարձությունների մասին և փոխանցում տվյալներ:
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("Ստացված տվյալներ: \(data)") } } - Կլոշներ (Closures) / Կապեր (Callbacks):
- Ֆունկցիայի փոխանցում, որը կկոչվի այլ վայրում:
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Data via closure") } } - NotificationCenter:
- Պաշտոն, որը հրապարակում և բաժանորդագրվում է հաղորդագրությունների համար:
// Ուղարկող NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Data from Notification"]) // Ստացող 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("Ստացված հաղորդագրության տվյալներ: \(data)") } } - Սինգլտոն / Համօգտագործվող օրինակ:
- Միակ օրինակ, որը հասանելի է գլոբալ:
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Մերժում է այլ օրինակների ստեղծումը } // Օգտագործում DataManager.shared.sharedData = "Data from Singleton" print(DataManager.shared.sharedData) - Կիև-արժեքի դիտարկում (KVO):
- Մեխանիզմ, որը հետևում է օբյեկտների հատկությունների փոփոխություններին:
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // Արժեքը պետք է լինի `@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("Արժեքը փոխվեց՝ \(newValue)") } } } } - Core Data / Realm / Այլ տվյալների բազաներ:
- Տվյալների պահպանման և փոխանակման համար վերահսկողության և վերահսկողության համար:
- Միջնորդ (Mediator Pattern):
- Օբյեկտ, որը կառավարում է փոխազդեցությունը այլ օբյեկտների միջև:
- Binding (կապում) ռեակտիվ ծրագրավորման (RxSwift, Combine) օգտագործմամբ:
- Տվյալների փոխանցում հոսքերով (streams) կամ հրատարակիչներով (publishers):
// Combine օրինակ import Combine let publisher = PassthroughSubject<String, Never>() // Գրանցող let subscriber = publisher.sink { receivedValue in print("Ստացված արժեքը Combine-ով: \(receivedValue)") } // Ուղարկող publisher.send("Data from Combine") - Օգտագործողի նախընտրանքներ (User Defaults):
- Փոքր քանակությամբ պարզ տվյալների պահպանման համար, որոնք հասանելի են գլոբալ:
UserDefaults.standard.set("User Name", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Անհատական միջավայրային օբյեկտներ SwiftUI-ում:
- Զարգացման ժամանակ կախվածությունների փոխանցում դեպի ստորին մասեր SwiftUI-ում:
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) } }