enunciados + leetcode
Enunciados como los de una entrevista real para resolver por tu cuenta, con el tiempo que te darían, y problemas de LeetCode recomendados para cada tecnología y seniority. Nada se corrige acá: resolvelo en tu editor, en voz alta, y marcá lo que ya practicaste.
Implementá un feed de posts que carga de a páginas desde GET https://api.example.com/posts?page=1&limit=20, que devuelve { "items": [{ "id": 1, "title": "...", "body": "..." }], "hasMore": true }. Mockeá el cliente con un protocolo PostsService y una implementación fake con delay.
Al llegar cerca del final de la lista se pide la página siguiente. Se puede hacer pull to refresh para volver a la primera página.
# requisitos
@Observable o ObservableObject marcado @MainActor.hasMore es false..refreshable.# si te sobra tiempo, te van a preguntar
UICollectionView y diffable data source?Agregá una búsqueda de productos que consulta func search(_ query: String) async throws -> [Product] a medida que el usuario escribe. El servicio mockeado tarda un tiempo aleatorio entre 100 y 800 ms.
No querés pegarle al servicio en cada tecla, y nunca deberías mostrar resultados de un query viejo que llegó tarde.
# requisitos
.task(id:) y Task.sleep o con Combine.# si te sobra tiempo, te van a preguntar
Escribí dos extensiones genéricas. La primera, func grouped<Key: Hashable>(by key: (Element) -> Key) -> [Key: [Element]] sobre Sequence. La segunda, func uniqued<Key: Hashable>(by key: (Element) -> Key) -> [Element], que elimina duplicados conservando el primer elemento de cada clave y el orden original.
Ejemplo: con [Order(customer: "ana", total: 10), Order(customer: "beto", total: 5), Order(customer: "ana", total: 7)], grouped(by: \.customer) devuelve ["ana": [10, 7], "beto": [5]] (mostrando los totales) y uniqued(by: \.customer) devuelve los pedidos de 10 y 5.
# requisitos
Element sea Hashable, solo la clave.# si te sobra tiempo, te van a preguntar
grouped usando Dictionary(grouping:by:)? ¿Qué cambia?uniqued devuelva una secuencia lazy?Element?