Sobes.tech
Junior

Milyen adatátviteli módszereket ismer?

sobes.tech MI

Válasz az MI-től

  • Tulajdonságok és inicializálók: Adatok átadása tulajdonságokon és inicializálók segítségével az objektum létrehozásakor.
  • Segues (Storyboards esetén): Adatok átadása nézetvezérlők között navigáció során a prepare(for:sender:) használatával.
  • Delegálás: Egy protokoll megvalósítása, amely lehetővé teszi egy objektumnak (delegátusnak), hogy értesítéseket és adatokat kapjon egy másik objektumtól.
  • NotificationCenter: Közzététel-előfizetés mechanizmus széles körű értesítések küldésére tetszőleges adatokkal.
  • Key-Value Observing (KVO): Mechanizmus az objektum tulajdonságainak változásainak figyelésére.
  • Closures/Callbacks: Adatok átadása zárványokon keresztül, amelyek aszinkron vagy egy adott esemény után futnak.
  • Singletons: Egy osztály közös példánya, amely mindenhol elérhető az alkalmazásban, adatok tárolására és cseréjére.
  • User Defaults: Kis mennyiségű felhasználói adatok tárolása állandó tárolóban.
  • Core Data/Realm/SQLite: Strukturált adatok tárolása és kezelése az eszközön.
  • File Storage: Adatok mentése fájlokba a lemezen (pl. dokumentumok, képek).
  • CloudKit: Felhőalapú szolgáltatás adatok tárolására és szinkronizálására az iCloudon keresztül.
  • Networking (APIs): Adatok átadása az alkalmazás és a szerver között hálózaton keresztül.
  • Environment Objects (SwiftUI): Objektumok megosztása a nézethierarchiában.
  • State Objects (SwiftUI): A nézet helyi állapotának kezelése.
  • Observed Objects (SwiftUI): Az objektumok kezelése, amelyekre a nézet feliratkozik.

Példa a Segues használatára:

// Az eredeti View Controllerben
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"
        }
    }
}

Példa a Delegation használatára:

// Delegate protokoll
protocol DataDelegate: AnyObject {
    func didReceiveData(_ data: String)
}

// Az adatokat küldő osztály
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

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

// Az adatokat fogadó osztály
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Received data: \(data)")
    }
}

Példa a NotificationCenter használatára:

// Értesítés küldése
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Data from NotificationCenter"])

// Értesítés fogadása
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)")
    }
}

// Ne felejtsd el eltávolítani a megfigyelőt
deinit {
    NotificationCenter.default.removeObserver(self)
}