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) } }