Sobes.tech
Junior

Que formas de transmissão de dados conheces?

sobes.tech IA

Resposta da IA

  • Propriedades:
    • Na inicialização (injeção por inicializador).
    • Atribuição após a inicialização.
    class ViewController: UIViewController {  
        var data: String? // Transferência de dados através da propriedade  
    }  
    
  • Delegados:
    • Protocolo com métodos para notificação de eventos e transferência de dados.
    protocol DataDelegate: AnyObject {  
        func didReceiveData(data: String)  
    }  
    
    class SenderViewController: UIViewController {  
        weak var delegate: DataDelegate?  
    
        func sendData() {  
            delegate?.didReceiveData(data: "Olá do remetente")  
        }  
    }  
    
    class ReceiverViewController: UIViewController, DataDelegate {  
        func didReceiveData(data: String) {  
            print("Dados recebidos: \(data)")  
        }  
    }  
    
  • Fechamentos (Closures) / Callbacks:
    • Transferência de função que será chamada em outro lugar.
    class SenderViewController: UIViewController {  
        var completionHandler: ((String) -> Void)?  
    
        func sendData() {  
            completionHandler?("Dados via closure")  
        }  
    }  
    
  • NotificationCenter:
    • Mecanismo de publicação e assinatura para notificações broadcast.
    // Remetente  
    NotificationCenter.default.post(name: NSNotification.Name("DataNotification"), object: nil, userInfo: ["data": "Dados da notificação"])  
    
    // 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("Dados da notificação recebidos: \(data)")  
        }  
    }  
    
  • Singleton / Instância Compartilhada:
    • Única instância da classe, acessível globalmente.
    class DataManager {  
        static let shared = DataManager()  
        var sharedData: String?  
        private init() {} // Proibir criação de outras instâncias  
    }  
    
    // Uso  
    DataManager.shared.sharedData = "Dados do Singleton"  
    print(DataManager.shared.sharedData)  
    
  • Observação de Valor-Chave (KVO):
    • Mecanismo para observar mudanças nas propriedades de objetos.
    class MyObservableObject: NSObject {  
        @objc dynamic var value: String = "" // A propriedade deve 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 alterado para: \(newValue)")  
                }  
            }  
        }  
    }  
    
  • Core Data / Realm / Outras bases de dados:
    • Para armazenamento persistente e troca de dados entre controladores e telas.
  • Mediador (Padrão Mediator):
    • Objeto que gerencia a interação entre outros objetos.
  • Vinculação (Binding) usando Programação Reativa (RxSwift, Combine):
    • Transferência de dados através de fluxos (streams) ou publicadores (publishers).
    // Exemplo com Combine  
    import Combine  
    
    let publisher = PassthroughSubject<String, Never>()  
    
    // Assinante  
    let subscriber = publisher.sink { receivedValue in  
        print("Valor recebido via Combine: \(receivedValue)")  
    }  
    
    // Emissor  
    publisher.send("Dados do Combine")  
    
  • User Defaults:
    • Para salvar pequenos dados simples, acessíveis globalmente.
    UserDefaults.standard.set("Nome de usuário", forKey: "userName")  
    let userName = UserDefaults.standard.string(forKey: "userName")  
    
  • Variáveis de ambiente (Environment Objects) em SwiftUI:
    • Para passar dependências para baixo na hierarquia de visualizações em SwiftUI.
    import SwiftUI  
    
    class AppData: ObservableObject {  
        @Published var message: String = "Mensagem inicial"  
    }  
    
    struct ContentView: View {  
        @EnvironmentObject var appData: AppData  
    
        var body: some View {  
            Text(appData.message)  
        }  
    }