Junior
Кайсы маалымат өткөрүү ыкмаларын билесиң?
sobes.tech AI
AIден жооп
- Магазиндар (Properties):
- Инициализацияда (initializer injection).
- Инициализациядан кийин берүү.
class ViewController: UIViewController { var data: String? // Маалыматтарды өткөрүү өзгөчөлүк аркылуу } - Делегаттар (Delegation):
- Оюндары жана маалыматтарды өткөрүү үчүн ыкмалары бар протокол.
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):
- Башка объекттердин ортосунда өз ара аракеттенүүнү башкарган объект.
- Reactive Programming (RxSwift, Combine) колдонуу менен Байланыш (Binding):
- Маалыматтарды агымдар (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-деги Ортамыш объекттер (Environment Objects):
- Төменге тәуелділіктерді 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) } }