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:
- Механізм публікацыі і падпіскі для шырокавяшчальных паведамленняў.
// Sender NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Data from Notification"]) // 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("Атрыманне паведамлення: \(data)") } } - Сінглтон / Shared Instance:
- Адзіны экземпляр класа, даступны глабальна.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Забараняе стварэнне іншых экземпляраў } // Выкарыстанне DataManager.shared.sharedData = "Data from Singleton" print(DataManager.shared.sharedData) - Key-Value Observing (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) з выкарыстаннем Reactive Programming (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") - Переменные асяроддзя (Environment Objects) у 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) } }