Sobes.tech
Junior

Que formas de transmissão de dados conhece?

sobes.tech IA

Resposta da IA

  • Propriedades e Inicializadores: Transferência de dados através de propriedades e inicializadores ao criar um objeto.
  • Segues (para Storyboards): Transferência de dados entre View Controllers durante a navegação usando prepare(for:sender:).
  • Delegação: Implementação de um protocolo que permite a um objeto (delegado) receber notificações e dados de outro objeto.
  • NotificationCenter: Mecanismo de publicação-assinatura para enviar notificações de difusão com dados arbitrários.
  • Observação de Valor-Chave (KVO): Mecanismo para observar mudanças nas propriedades dos objetos.
  • Closures/Callbacks: Transferência de dados através de closures que são executadas de forma assíncrona ou após um evento específico.
  • Singletons: Instância compartilhada de uma classe, acessível de qualquer parte da aplicação, para armazenar e trocar dados.
  • User Defaults: Armazenamento de pequenos volumes de dados do utilizador em armazenamento persistente.
  • Core Data/Realm/SQLite: Armazenamento e gestão de dados estruturados no dispositivo.
  • File Storage: Guardar dados em ficheiros no disco (por exemplo, documentos, imagens).
  • CloudKit: Serviço na nuvem para armazenar e sincronizar dados entre dispositivos iCloud.
  • Networking (APIs): Transferência de dados entre a aplicação e o servidor através da rede.
  • Environment Objects (SwiftUI): Fornecimento de objetos partilhados na hierarquia de vistas.
  • State Objects (SwiftUI): Gestão do estado local da vista.
  • Observed Objects (SwiftUI): Gestão de objetos aos quais a vista está inscrita.

Exemplo de uso de Segues:

// No View Controller de origem
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
    if segue.identifier == "showDetail" {
        if let destinationVC = segue.destination as? DetailViewController {
            destinationVC.dataToReceive = "Olá do VC de origem"
        }
    }
}

Exemplo de uso de Delegação:

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

// Classe que envia dados
class SendingViewController: UIViewController {
    weak var delegate: DataDelegate?

    func sendData() {
        delegate?.didReceiveData("Dados enviados via delegado")
    }
}

// Classe que recebe dados
class ReceivingViewController: UIViewController, DataDelegate {
    func didReceiveData(_ data: String) {
        print("Dados recebidos: \(data)")
    }
}

Exemplo de uso de NotificationCenter:

// Envio de notificação
NotificationCenter.default.post(name: Notification.Name("myDataNotification"), object: nil, userInfo: ["dataKey": "Dados do NotificationCenter"])

// Recebimento de notificação
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("Dados recebidos: \(receivedData)")
    }
}

// Não esquecer de remover o observador
deinit {
    NotificationCenter.default.removeObserver(self)
}