Sobes.tech
Junior

Qaysi ma'lumot uzatish usullarini bilasiz?

sobes.tech AI

AIdan javob

  • Xususiyatlar:
    • Initsializatsiya vaqtida (initsializator injektsiyasi).
    • Initsializatsiyadan keyin tayinlash.
    class ViewController: UIViewController {  
        var data: String? // Ma'lumotlarni o'tkazish uchun xususiyat  
    }  
    
  • Delegatlar:
    • Hodisalar haqida bildirish va ma'lumotlarni uzatish uchun metodlar bilan protokol.
    protocol DataDelegate: AnyObject {  
        func didReceiveData(data: String)  
    }  
    
    class SenderViewController: UIViewController {  
        weak var delegate: DataDelegate?  
    
        func sendData() {  
            delegate?.didReceiveData(data: "Senderdan kelgan xabar")  
        }  
    }  
    
    class ReceiverViewController: UIViewController, DataDelegate {  
        func didReceiveData(data: String) {  
            print("Qabul qilingan ma'lumot: \(data)")  
        }  
    }  
    
  • Yopishlar (Closures) / Callbacks:
    • Boshqa joyda chaqiriladigan funktsiya uzatish.
    class SenderViewController: UIViewController {  
        var completionHandler: ((String) -> Void)?  
    
        func sendData() {  
            completionHandler?("Yopish orqali ma'lumot")  
        }  
    }  
    
  • NotificationCenter:
    • E'lon qilish va obuna bo'lish mexanizmi keng tarqaladigan bildirishnomalar uchun.
    // Sender  
    NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Bildirishnomadan ma'lumot"])  
    
    // Receiver  
    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("Qabul qilingan bildirishnoma ma'lumotlari: \(data)")  
        }  
    }  
    
  • Singleton / Umumiy instansiya:
    • Faqat bitta sinf nusxasi, global ravishda mavjud.
    class DataManager {  
        static let shared = DataManager()  
        var sharedData: String?  
        private init() {} // Boshqa nusxalarni yaratishni taqiqlash  
    }  
    
    // Foydalanish  
    DataManager.shared.sharedData = "Singletondan ma'lumot"  
    print(DataManager.shared.sharedData)  
    
  • Kalit-qiymat kuzatuvi (KVO):
    • Ob'ektlarning xususiyatlaridagi o'zgarishlarni kuzatish mexanizmi.
    class MyObservableObject: NSObject {  
        @objc dynamic var value: String = "" // Xususiyat `@objc dynamic` bo'lishi kerak  
    }  
    
    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("Qiymat o'zgardi: \(newValue)")  
                }  
            }  
        }  
    }  
    
  • Core Data / Realm / Boshqa ma'lumotlar bazalari:
    • Doimiy saqlash va kontrollchilar va ekranlar o'rtasida ma'lumot almashish uchun.
  • Mediatsiya (Mediator Pattern):
    • Boshqa ob'ektlar o'rtasidagi o'zaro ta'sirni boshqaradigan ob'ekt.
  • Reaktiv dasturlash (RxSwift, Combine) yordamida Binding:
    • Ma'lumotlarni oqimlar (streams) yoki nashriychilar (publishers) orqali uzatish.
    // Combine bilan misol  
    import Combine  
    
    let publisher = PassthroughSubject<String, Never>()  
    
    // Obuna  
    let subscriber = publisher.sink { receivedValue in  
        print("Receive qilingan qiymat: \(receivedValue)")  
    }  
    
    // Yuboruvchi  
    publisher.send("Combine'dan ma'lumot")  
    
  • Foydalanuvchi sozlamalari (User Defaults):
    • Kichik va oddiy ma'lumotlarni saqlash uchun, global ravishda mavjud.
    UserDefaults.standard.set("Foydalanuvchi nomi", forKey: "userName")  
    let userName = UserDefaults.standard.string(forKey: "userName")  
    
  • SwiftUI'da Muhit ob'ektlari (Environment Objects):
    • SwiftUI'da ko'rinishlar hierarhiyasiga bog'liqliklarni uzatish uchun.
    import SwiftUI  
    
    class AppData: ObservableObject {  
        @Published var message: String = "Boshlang'ich xabar"  
    }  
    
    struct ContentView: View {  
        @EnvironmentObject var appData: AppData  
    
        var body: some View {  
            Text(appData.message)  
        }  
    }