Junior
¿Qué formas de transmisión de datos conoces?
sobes.tech AI
Respuesta de la IA
- Propiedades:
- En la inicialización (inyección de inicializador).
- Asignación después de la inicialización.
class ViewController: UIViewController { var data: String? // Transferencia de datos a través de la propiedad } - Delegados:
- Protocolo con métodos para notificación de eventos y transferencia de datos.
protocol DataDelegate: AnyObject { func didReceiveData(data: String) } class SenderViewController: UIViewController { weak var delegate: DataDelegate? func sendData() { delegate?.didReceiveData(data: "Hola desde el remitente") } } class ReceiverViewController: UIViewController, DataDelegate { func didReceiveData(data: String) { print("Datos recibidos: \(data)") } } - Closures / Callbacks:
- Transferencia de función que será llamada en otro lugar.
class SenderViewController: UIViewController { var completionHandler: ((String) -> Void)? func sendData() { completionHandler?("Datos vía closure") } } - NotificationCenter:
- Mecanismo de publicación y suscripción para notificaciones broadcast.
// Remitente NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Datos de la notificación"]) // Receptor 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("Datos de la notificación recibidos: \(data)") } } - Singleton / Instancia compartida:
- Única instancia de la clase, accesible globalmente.
class DataManager { static let shared = DataManager() var sharedData: String? private init() {} // Prohibir crear otras instancias } // Uso DataManager.shared.sharedData = "Datos del Singleton" print(DataManager.shared.sharedData) - Key-Value Observing (KVO):
- Mecanismo para observar cambios en las propiedades de los objetos.
class MyObservableObject: NSObject { @objc dynamic var value: String = "" // La propiedad debe ser `@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("Valor cambiado a: \(newValue)") } } } } - Core Data / Realm / Otras bases de datos:
- Para almacenamiento persistente e intercambio de datos entre controladores y pantallas.
- Intermediario (Patrón Mediador):
- Objeto que gestiona la interacción entre otros objetos.
- Vinculación (Binding) usando Programación Reactiva (RxSwift, Combine):
- Transferencia de datos a través de flujos (streams) o publicadores (publishers).
// Ejemplo con Combine import Combine let publisher = PassthroughSubject<String, Never>() // Suscriptor let subscriber = publisher.sink { receivedValue in print("Valor recibido vía Combine: \(receivedValue)") } // Emisor publisher.send("Datos desde Combine") - User Defaults:
- Para guardar pequeños datos simples, accesibles globalmente.
UserDefaults.standard.set("Nombre de usuario", forKey: "userName") let userName = UserDefaults.standard.string(forKey: "userName") - Variables de entorno (Environment Objects) en SwiftUI:
- Para pasar dependencias hacia abajo en la jerarquía de vistas en SwiftUI.
import SwiftUI class AppData: ObservableObject { @Published var message: String = "Mensaje inicial" } struct ContentView: View { @EnvironmentObject var appData: AppData var body: some View { Text(appData.message) } }