Junior
Quali metodi di trasmissione dei dati conosci?
sobes.tech AI
Risposta dell'AI
- Proprietà e inizializzatori: Trasferimento di dati tramite proprietà e inizializzatori durante la creazione di un oggetto.
- Segues (per Storyboard): Trasferimento di dati tra View Controller durante la navigazione usando
prepare(for:sender:). - Delegation: Implementazione di un protocollo che consente a un oggetto (delegato) di ricevere notifiche e dati da un altro oggetto.
- NotificationCenter: Meccanismo di pubblicazione-sottoscrizione per inviare notifiche broadcast con dati arbitrari.
- Key-Value Observing (KVO): Meccanismo per osservare le modifiche alle proprietà degli oggetti.
- Closures/Callbacks: Trasferimento di dati tramite closure che vengono eseguite in modo asincrono o dopo un evento specifico.
- Singletons: Istanza condivisa di una classe, accessibile da qualsiasi parte dell'applicazione, per memorizzare e scambiare dati.
- User Defaults: Memorizzazione di piccoli volumi di dati utente in memoria persistente.
- Core Data/Realm/SQLite: Memorizzazione e gestione di dati strutturati sul dispositivo.
- File Storage: Salvataggio di dati in file sul disco (ad esempio, documenti, immagini).
- CloudKit: Servizio cloud per memorizzare e sincronizzare dati tra dispositivi iCloud.
- Networking (APIs): Trasferimento di dati tra applicazione e server tramite rete.
- Environment Objects (SwiftUI): Fornitura di oggetti condivisi nella gerarchia delle viste.
- State Objects (SwiftUI): Gestione dello stato locale della vista.
- Observed Objects (SwiftUI): Gestione di oggetti a cui la vista è iscritta.
Esempio di utilizzo di Segues:
// Nel View Controller di origine
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "showDetail" {
if let destinationVC = segue.destination as? DetailViewController {
destinationVC.dataToReceive = "Ciao dal source VC"
}
}
}
Esempio di utilizzo di Delegation:
// Protocollo del delegato
protocol DataDelegate: AnyObject {
func didReceiveData(_ data: String)
}
// Classe che invia dati
class SendingViewController: UIViewController {
weak var delegate: DataDelegate?
func sendData() {
delegate?.didReceiveData("Dati inviati tramite delegate")
}
}
// Classe che riceve dati
class ReceivingViewController: UIViewController, DataDelegate {
func didReceiveData(_ data: String) {
print("Dati ricevuti: \(data)")
}
}
Esempio di utilizzo di NotificationCenter:
// Invio di notifica
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Dati da NotificationCenter"])
// Ricezione di notifica
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("Dati ricevuti: \(receivedData)")
}
}
// Non dimenticare di rimuovere l'osservatore
deinit {
NotificationCenter.default.removeObserver(self)
}