Domande per il Colloquio di Sviluppatore Mobile Junior (iOS): Guida Completa

Milad Bonakdar
Autore
Padroneggia i fondamenti dello sviluppo iOS con domande essenziali per il colloquio che coprono Swift, UIKit, SwiftUI, la persistenza dei dati e l'architettura delle app iOS per sviluppatori junior.
Introduzione
Lo sviluppo iOS è diventato una delle competenze più richieste nello sviluppo di app mobile. Con Swift come linguaggio principale e framework potenti come UIKit e SwiftUI, gli sviluppatori iOS creano esperienze per milioni di utenti in tutto il mondo.
Questa guida copre le domande essenziali per i colloqui per Junior iOS Developer. Esploreremo i fondamenti di Swift, lo sviluppo dell'interfaccia utente, la persistenza dei dati, il networking e le migliori pratiche iOS per aiutarti a prepararti per il tuo primo ruolo come sviluppatore iOS.
Fondamenti di Swift (6 Domande)
1. Qual è la differenza tra var e let in Swift?
Risposta:
var: Dichiara una variabile mutabile. Il suo valore può essere modificato dopo l'inizializzazione.let: Dichiara una costante immutabile. Una volta impostato, il suo valore non può essere modificato.- Best Practice: Usa
letdi default per sicurezza e chiarezza. Usavarsolo quando sai che il valore cambierà.
Rarità: Molto Comune Difficoltà: Facile
2. Spiega gli Optional in Swift. Cos'è l'Optional Binding?
Risposta:
Gli Optional rappresentano un valore che potrebbe essere nil (assenza di un valore).
- Dichiarazione: Usa
?dopo il tipo:var name: String? - Metodi di Unwrapping:
- Force Unwrapping:
name!(pericoloso, crasha se nil) - Optional Binding: Unwrapping sicuro usando
if letoguard let - Nil Coalescing:
name ?? "Default" - Optional Chaining:
user?.address?.city
- Force Unwrapping:
Rarità: Molto Comune Difficoltà: Facile
3. Qual è la differenza tra una class e una struct in Swift?
Risposta:
- Class: Tipo di riferimento (memorizzato nell'heap). Supporta l'ereditarietà. Passato per riferimento.
- Struct: Tipo di valore (memorizzato nello stack). Nessuna ereditarietà. Passato per copia.
- Quando usare:
- Struct: Per modelli di dati semplici, quando si desidera una semantica di valore (copie indipendenti)
- Class: Quando è necessaria l'ereditarietà, la semantica di riferimento o i deinitializer
Rarità: Molto Comune Difficoltà: Media
4. Cosa sono le Closure in Swift?
Risposta: Le Closure sono blocchi di funzionalità autonomi che possono essere passati e utilizzati nel tuo codice. Sono simili alle lambda o alle funzioni anonime in altri linguaggi.
- Sintassi:
{ (parametri) -> ReturnType in statements } - Cattura di Valori: Le Closure possono catturare e memorizzare riferimenti a variabili dal loro contesto circostante.
- Uso Comune: Completion handler, callback, operazioni su array.
Rarità: Molto Comune Difficoltà: Media
5. Spiega la differenza tra riferimenti weak e unowned.
Risposta: Entrambi vengono utilizzati per prevenire cicli di ritenzione (perdite di memoria) nei tipi di riferimento.
weak: Riferimento opzionale che diventa automaticamentenilquando l'oggetto a cui si fa riferimento viene deallocato. Usare quando il riferimento potrebbe sopravvivere all'oggetto.unowned: Riferimento non opzionale che presuppone che l'oggetto esisterà sempre. Si arresta in modo anomalo se vi si accede dopo la deallocazione. Usare quando si è certi che il riferimento non sopravviverà all'oggetto.
Rarità: Comune Difficoltà: Media
6. Cosa sono i Protocolli in Swift?
Risposta: I Protocolli definiscono un blueprint di metodi, proprietà e altri requisiti adatti a un particolare compito o funzionalità. Classi, struct ed enum possono adottare protocolli.
- Simile a: Interfacce in altri linguaggi
- Estensioni di Protocollo: Possono fornire implementazioni predefinite
- Programmazione Orientata al Protocollo: Paradigma preferito di Swift
Rarità: Molto Comune Difficoltà: Facile
Basi di UIKit (5 Domande)
7. Qual è la differenza tra UIView e UIViewController?
Risposta:
UIView: Rappresenta un'area rettangolare sullo schermo. Gestisce il disegno e la gestione degli eventi. Esempi:UILabel,UIButton,UIImageView.UIViewController: Gestisce una gerarchia di viste. Gestisce il ciclo di vita della vista, le interazioni dell'utente e la navigazione. Contiene una vista radice e gestisce le sue sottoviste.- Relazione: Un view controller gestisce le viste. Un view controller può avere molte viste.
Rarità: Molto Comune Difficoltà: Facile
8. Spiega i metodi del ciclo di vita di un View Controller.
Risposta: I view controller hanno metodi specifici del ciclo di vita chiamati in ordine:
viewDidLoad(): Chiamato una volta quando la vista viene caricata in memoria. Impostazioni che devono avvenire una sola volta.viewWillAppear(_:): Chiamato prima che la vista appaia sullo schermo. Può essere chiamato più volte.viewDidAppear(_:): Chiamato dopo che la vista appare sullo schermo. Avvia le animazioni qui.viewWillDisappear(_:): Chiamato prima che la vista scompaia.viewDidDisappear(_:): Chiamato dopo che la vista scompare. Pulisci le risorse.
Rarità: Molto Comune Difficoltà: Facile
9. Cos'è Auto Layout e come si usano i vincoli (constraints)?
Risposta: Auto Layout è un sistema di layout basato su vincoli che ti consente di creare interfacce utente adattive che funzionano su diverse dimensioni dello schermo e orientamenti.
- Vincoli (Constraints): Definiscono le relazioni tra le viste (larghezza, altezza, spaziatura, allineamento)
- Metodi:
- Interface Builder: Editor visuale in Xcode
- Programmatico: API NSLayoutConstraint o NSLayoutAnchor
- Visual Format Language: Basato su stringhe (meno comune ora)
Rarità: Molto Comune Difficoltà: Media
10. Qual è la differenza tra frame e bounds?
Risposta:
frame: La posizione e le dimensioni della vista nel sistema di coordinate della sua supervista. Usato per posizionare la vista.bounds: La posizione e le dimensioni della vista nel suo proprio sistema di coordinate. L'origine è solitamente (0, 0). Usato per disegnare il contenuto all'interno della vista.- Differenza Chiave:
frameè relativo al genitore,boundsè relativo a se stesso.
Rarità: Comune Difficoltà: Media
11. Come gestisci l'input utente da un UITextField?
Risposta: Esistono diversi approcci:
- Target-Action: Aggiungi target per l'evento
.editingChanged - Delegate: Conformarsi al protocollo
UITextFieldDelegate - Combine: Usa i publisher (approccio moderno)
Rarità: Molto Comune Difficoltà: Facile
Basi di SwiftUI (4 Domande)
12. Cos'è SwiftUI e in cosa è diverso da UIKit?
Risposta: SwiftUI è il framework UI dichiarativo di Apple introdotto in iOS 13.
- UIKit: Imperativo (dici al sistema come costruire l'interfaccia utente passo dopo passo). Maturo, ampiamente utilizzato.
- SwiftUI: Dichiarativo (descrivi come dovrebbe apparire l'interfaccia utente). Moderno, meno codice, aggiornamenti automatici.
- Caratteristiche Chiave:
- Anteprima live in Xcode
- Multipiattaforma (iOS, macOS, watchOS, tvOS)
- Aggiornamenti dell'interfaccia utente guidati dallo stato
- Animazioni integrate
Rarità: Molto Comune Difficoltà: Facile
13. Spiega @State, @Binding e @ObservedObject in SwiftUI.
Risposta: Questi sono wrapper di proprietà per la gestione dello stato in SwiftUI:
@State: Stato privato di proprietà della vista. Quando cambia, la vista viene renderizzata nuovamente.@Binding: Crea una connessione bidirezionale a una proprietà@Statedi proprietà di una vista padre.@ObservedObject: Fa riferimento a un oggetto esterno (classe conforme aObservableObject). La vista si aggiorna quando le proprietà@Publisheddell'oggetto cambiano.
Rarità: Comune Difficoltà: Media
14. Come crei una lista in SwiftUI?
Risposta:
Usa la vista List per visualizzare raccolte scorrevoli di dati.
Rarità: Comune Difficoltà: Facile
15. Cosa sono i View Modifiers in SwiftUI?
Risposta: I modificatori di vista sono metodi che creano una nuova vista con proprietà modificate. Sono concatenabili.
- Modificatori Comuni:
.padding(),.background(),.foregroundColor(),.font(),.frame() - L'Ordine Conta: I modificatori vengono applicati in sequenza
Rarità: Comune Difficoltà: Facile
Dati e Networking (5 Domande)
16. Come fai una richiesta di rete in iOS?
Risposta:
Usa URLSession per le attività di networking.
Rarità: Molto Comune Difficoltà: Media
17. Cos'è Codable in Swift?
Risposta:
Codable è un alias di tipo per i protocolli Encodable & Decodable. Consente una facile conversione tra tipi Swift e rappresentazioni esterne come JSON.
- Sintesi Automatica: Swift genera automaticamente il codice di codifica/decodifica se tutte le proprietà sono Codable.
- Chiavi Personalizzate: Usa l'enum
CodingKeysper mappare nomi di proprietà diversi.
Rarità: Molto Comune Difficoltà: Facile
18. Come rendi persistenti i dati localmente in iOS?
Risposta: Molteplici opzioni per la persistenza dei dati locale:
- UserDefaults: Semplice storage chiave-valore per piccole quantità di dati (impostazioni, preferenze)
- File System: Salva i file nella directory Documents o Cache
- Core Data: Framework di Apple per la gestione e la persistenza del grafo di oggetti
- SQLite: Database relazionale
- Keychain: Storage sicuro per dati sensibili (password, token)
Rarità: Molto Comune Difficoltà: Facile
19. Qual è la differenza tra operazioni sincrone e asincrone?
Risposta:
- Sincrone: Blocca il thread corrente fino al completamento dell'operazione. Può bloccare l'interfaccia utente se eseguita sul thread principale.
- Asincrone: Non blocca il thread. L'operazione viene eseguita in background e viene chiamato un completion handler al termine.
- Thread Principale: Gli aggiornamenti dell'interfaccia utente devono avvenire sul thread principale. Usa
DispatchQueue.main.asyncper passare al thread principale.
Rarità: Comune Difficoltà: Facile
20. Cos'è Grand Central Dispatch (GCD)?
Risposta: GCD è l'API di basso livello di Apple per la gestione di operazioni concorrenti.
- Dispatch Queues: Code FIFO che eseguono attività in serie o in modo concorrente
- Main Queue: Coda seriale per gli aggiornamenti dell'interfaccia utente
- Global Queues: Code concorrenti con priorità diverse (background, utility, userInitiated)
Rarità: Comune Difficoltà: Media



