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) } }