Sobes.tech
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)  
        }  
    }