Sobes.tech
Junior

¿Qué formas de transmisión de datos conoces?

sobes.tech AI

Respuesta de la IA

  • Propiedades e inicializadores: Transferencia de datos a través de propiedades e inicializadores al crear un objeto.
  • Segues (para Storyboards): Transferencia de datos entre View Controllers durante la navegación usando prepare(for:sender:).
  • Delegación: Implementación de un protocolo que permite a un objeto (delegado) recibir notificaciones y datos de otro objeto.
  • NotificationCenter: Mecanismo de publicación-suscripción para enviar notificaciones de difusión con datos arbitrarios.
  • Observación de valor clave (KVO): Mecanismo para observar cambios en las propiedades de los objetos.
  • Closures/Callbacks: Transferencia de datos mediante cierres que se ejecutan de forma asíncrona o después de un evento específico.
  • Singletons: Instancia compartida de una clase, accesible desde cualquier parte de la aplicación, para almacenar e intercambiar datos.
  • User Defaults: Almacenamiento de pequeños volúmenes de datos del usuario en almacenamiento persistente.
  • Core Data/Realm/SQLite: Almacenamiento y gestión de datos estructurados en el dispositivo.
  • File Storage: Guardar datos en archivos en el disco (por ejemplo, documentos, imágenes).
  • CloudKit: Servicio en la nube para almacenar y sincronizar datos entre dispositivos iCloud.
  • Networking (APIs): Transferencia de datos entre la aplicación y el servidor a través de la red.
  • Environment Objects (SwiftUI): Provisión de objetos compartidos en la jerarquía de vistas.
  • State Objects (SwiftUI): Gestión del estado local de la vista.
  • Observed Objects (SwiftUI): Gestión de objetos a los que la vista está suscrita.

Ejemplo de uso de Segues:

// En el View Controller de origen
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail" {
        if let destinationVC = segue.destination as? DetailViewController {
            destinationVC.dataToReceive = "Hola desde la vista fuente"
        }
    }
}

Ejemplo de uso de Delegación:

// Protocolo del delegado
protocol DataDelegate: AnyObject {
    func didReceiveData(_ data: String)
}

// Clase que envía datos
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

    func sendData() {
        delegate?.didReceiveData("Datos enviados vía delegado")
    }
}

// Clase que recibe datos
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Datos recibidos: \(data)")
    }
}

Ejemplo de uso de NotificationCenter:

// Envío de notificación
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Datos de NotificationCenter"])

// Recepción de notificación
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("Datos recibidos: \(receivedData)")
    }
}

// No olvidar eliminar el observador
deinit {
    NotificationCenter.default.removeObserver(self)
}