Sobes.tech
Junior

Маалымат өткөрүүнүн кайсы жолдорун билесиз?

sobes.tech AI

AIден жооп

  • Магниттер жана Инициализаторлор: Объект түзүүдө маалыматтарды өткөрүү — мүнөздөмөлөр жана инициализаторлор аркылуу.
  • Segues (Storyboards үчүн): View Controllerлер арасында маалыматтарды өткөрүү — prepare(for:sender:) колдонуу менен.
  • Delegation: Протоколду ишке ашыруу, ал бир объектке (делегатка) башка объекттен билдирүүлөрдү жана маалыматтарды алууга мүмкүндүк берет.
  • NotificationCenter: Publish-Subscribe механизми — каалаган маалыматтар менен кеңири таратуу үчүн.
  • Key-Value Observing (KVO): Объекттердин мүнөздөмөлөрүнүн өзгөрүшүн көзөмөлдөө механизми.
  • Closures/Callbacks: Маалыматтарды өткөрүү — жабуулардын жардамы менен, алар асинхрондуу же белгилүү бир окуядан кийин ишке ашат.
  • Singletons: Классдин жалпы үлгүсү, колдонмонун каалаган жеринен жеткиликтүү, маалыматтарды сактоо жана алмашуу үчүн.
  • User Defaults: Колдонуучунун кичинекей маалыматтарын туруктуу сактоо.
  • Core Data/Realm/SQLite: Структураланган маалыматтарды сактоо жана башкаруу.
  • File Storage: Маалыматтарды файлдарга сактоо — дискте (мисалы, документтер, сүрөттөр).
  • CloudKit: Булут кызматтары — iCloud аркылуу маалыматтарды сактоо жана синхрондоо.
  • Networking (APIs): Тармак аркылуу маалыматтарды берүү — колдонмо менен сервер ортосунда.
  • Environment Objects (SwiftUI): Көңүл ачуучу объекттер — көрүнүштөрдүн иерархиясында бөлүшүү.
  • State Objects (SwiftUI): Жергиликтүү абалды башкаруу.
  • Observed Objects (SwiftUI): Катталган объекттер — көрүнүш аларга жазылат.

Segues колдонуу мисалы:

// Баштапкы View Controllerде
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail" {
        if let destinationVC = segue.destination as? DetailViewController {
            destinationVC.dataToReceive = "Hello from source VC"
        }
    }
}

Delegation колдонуу мисалы:

// Делегат протоколу
protocol DataDelegate: AnyObject {
    func didReceiveData(_ data: String)
}

// Маалыматтарды жиберүүчү класс
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

    func sendData() {
        delegate?.didReceiveData("Data sent via delegate")
    }
}

// Маалыматтарды алгысы келген класс
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Received data: \(data)")
    }
}

NotificationCenter колдонуу мисалы:

// Билдирүү жөнөтүү
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Data from NotificationCenter"])

// Билдирүү кабыл алуу
NotificationCenter.default.addObserver(self, selector: #selector(handleDataNotification(_:)), name: Notification.Name("myDataNotification"), object: nil)

@objc func handleDataNotification(_ notification: Notification) {
    if let receivedData = notification.userInfo?["dataKey"] as? String {
        print("Received data: \(receivedData)")
    }
}

// Байкоочуну алып салуу керек
deinit {
    NotificationCenter.default.removeObserver(self)
}