Protocolos e despacho dinâmico

Swift Hard protocols

Tarefa «Protocolos e despacho dinâmico»

Implemente um sistema para processar serialização de dados com base em protocolos. Defina o protocolo `Serializable` com a exigência do método `func serialize() -> String`. Crie as estruturas `User` (com os campos name: String, age: Int), `Address` (city: String, street: String), `Product` (id: Int, title: String, price: Double). Cada estrutura deve estar em conformidade com o protocolo `Serializable`: retorne uma string no formato JSON (exemplo: {"name":"John","age":30}). Escreva a função `func processSerialization<T: Serializable>(_ items: [T]) -> [String]`, que recebe um array de elementos que estão em conformidade com o protocolo e retorna um array de strings de serialização. A ordem dos elementos é preservada. Restrições: as strings podem conter apenas letras latinas, espaços e dígitos; não é necessário escape. Saída: cada string em uma nova linha.

Formato de Entrada

A primeira linha contém um número inteiro N (1 ≤ N ≤ 100) — a quantidade de objetos. Em seguida, para cada objeto: uma linha com o tipo (User, Address, Product) e os campos correspondentes separados por espaço. Para User: name (String) age (Int). Para Address: city (String) street (String). Para Product: id (Int) title (String) price (Double).

Formato de Saída

N linhas, cada uma sendo o resultado da serialização do objeto correspondente no formato especificado.

Exemplos

Exemplo 1

ENTRADA
2 Address Paris RueDeRivoli Product 42 Book 12.5
SAÍDA
{"city":"Paris","street":"RueDeRivoli"} {"id":42,"title":"Book","price":12.5}

Exemplo 2

ENTRADA
3 2 3 1
SAÍDA

Exemplo 3

ENTRADA
3 https://httpbin.org/delay/1 https://httpbin.org/delay/2 https://httpbin.org/delay/0.5 1000
SAÍDA
main.swift