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.
Tenés un array de Country con la forma struct Country { let code: String; let name: String; let capital: String; let population: Int }. Armá una pantalla en SwiftUI que muestre la lista de países ordenada por nombre, con una barra de búsqueda arriba.
Al tocar un país se navega a una pantalla de detalle que muestra nombre, capital y población formateada (por ejemplo 45.808.747). Los datos están hardcodeados; no hace falta red.
# requisitos
NavigationStack, List y .searchable.Country conforma Identifiable para que List no necesite id: \.self.formatted() o NumberFormatter, respetando el locale.ContentUnavailableView cuando no hay resultados.# si te sobra tiempo, te van a preguntar
@State?Una API devuelve este JSON: { "user_id": 42, "full_name": "Ana Pérez", "email": null, "created_at": "2024-05-10T14:30:00Z", "tags": ["admin", "beta"] }. Definí un modelo User en Swift y escribí la función que decodifica un Data con ese contenido.
Después, la API agrega un campo plan que puede valer "free", "pro" o, en el futuro, valores que todavía no conocés. Tu modelo no debería romperse cuando aparezca un valor nuevo.
# requisitos
userId, fullName, createdAt).email es opcional y createdAt es un Date, no un String.plan es un enum con un caso unknown para valores no contemplados.do/catch y se loguean con información útil.# si te sobra tiempo, te van a preguntar
CodingKeys y cuándo keyDecodingStrategy = .convertFromSnakeCase?try, try? y try!?Armá una pantalla de login en SwiftUI con campos de email y contraseña y un botón Ingresar. Mockeá el servicio con func login(email: String, password: String) async throws -> String que espera 1 segundo y devuelve un token, o tira error si la contraseña es "error".
Mientras se valida contra el servicio, el botón muestra un ProgressView y no se puede tocar de nuevo. Si falla, se muestra un mensaje de error debajo del formulario.
# requisitos
SecureField y el de email el teclado y textContentType adecuados.Task y el estado de carga se actualiza en el main actor.@FocusState.# si te sobra tiempo, te van a preguntar
UserDefaults?Dictionary y bajar de O(n²) a O(n); casi siempre aparece en la primera ronda.String y Character en Swift.