Top 40 Swift Pitanja i odgovori za intervju (2026.)

Priprema za a Swift Intervju za razvojnog programera znaฤi predviฤanje onoga ลกto ispitivaฤi doista procjenjuju izvan sintakse. Swift Pitanja za intervju otkrivaju dubinu rjeลกavanja problema, prosudbu kodiranja i praktiฤno razumijevanje u stvarnim scenarijima.
Ove uloge otvaraju snaลพne karijerne puteve kako raste prihvaฤanje iOS-a, nagraฤujuฤi tehniฤku struฤnost, struฤnost u domeni i iskustvo u stvarnoj proizvodnji. Struฤnjaci koji rade u tom podruฤju primjenjuju analize, usavrลกavaju vjeลกtine, suraฤuju s timovima, pomaลพu menadลพerima i viลกim rukovoditeljima te samouvjereno rjeลกavaju uobiฤajena pitanja i odgovore, od poฤetnika do iskusnih struฤnjaka diljem svijeta danas. ฤitaj viลกeโฆ
๐ Besplatno preuzimanje PDF-a: Swift Pitanja i odgovori za intervju
vrh Swift Intervjuirajte pitanja i odgovore
1) ล to je Swift i ลกto ga ฤini popularnim za iOS razvoj?
Swift je moderni programski jezik visoke razine koji je razvio Apple za izradu aplikacija na iOS-u, macOS, watchOS i tvOS. Naglaลกava sigurnost, performanse i izraลพajnost, sa znaฤajkama kao ลกto su opcionalne vrste, zakljuฤivanje o tipui automatsko upravljanje memorijom. SwiftSintaksa je koncizna, ali moฤna, ลกto smanjuje vjerojatnost uobiฤajenih programskih pogreลกaka poput dereferenciranja nultog pokazivaฤa i neusklaฤenosti tipova. Swift takoฤer podrลพava Protokolno orijentirano programiranje (POP) uz tradicionalne objektno orijentirane paradigme, omoguฤujuฤi modularniji i viลกekratno upotrebljiv kod.
Primjer: Swift'S opcionalni tip enkapsulira varijablu koja moลพe, ali i ne mora sadrลพavati vrijednost, sprjeฤavajuฤi neoฤekivane padove tijekom izvoฤenja zbog nil referenci, ลกto je bio ฤest izvor greลกaka u ranijim jezicima poput Objective-C-a.
2) Kako se deklariraju varijable i konstante u SwiftKoja je razlika izmeฤu var i let?
Za deklariranje varijable u Swift, ti koristiลก varZa deklariranje konstante koristite let. varijabla (var) moลพe promijeniti svoju vrijednost nakon ลกto joj je dodijeljena, dok je konstanta (let) ne moลพe se ponovno dodijeliti nakon inicijalizacije - ลกto potiฤe sigurniji i predvidljiviji kod.
Primjer:
var age = 25 // Variable let name = "John" // Constant, value cannot change
Ako pokuลกate ponovno dodijeliti vrijednost let konstanta, kompajler ฤe izbaciti greลกku. Ova razlika nameฤe nepromjenjivost prema zadanim postavkama gdje je to moguฤe, poboljลกavajuฤi stabilnost programa.
3) ล to su opcionalne stavke u Swift i zaลกto su oni vaลพni?
Dodaci u Swift su a jeziฤna znaฤajka koja izraลพava moguฤnost da varijabla moลพda nema vrijednostUmjesto implicitne pretpostavke da varijabla uvijek sadrลพi podatke, Swift koristi ? sintaksa koja oznaฤava da varijabla moลพe biti nil, ลกto ฤini kod sigurnijim prisiljavajuฤi programera da eksplicitno raspakira ili obradi odsutnost vrijednosti.
Primjer:
var number: Int? = nil // This variable might hold an Int or nil
if let safeNumber = number {
print(safeNumber)
} else {
print("No value present")
}
Opcionalne opcije pomaลพu u otkrivanju greลกaka tijekom kompajliranja koje bi se inaฤe pojavile tijekom izvoฤenja.
4) Koja je razlika izmeฤu vrijednosnih tipova i referentnih tipova u Swift?
In Swift, vrste vrijednosti (Npr. struct, enum, tuple) pohraniti jedinstvenu kopiju podataka, dok tipovi referenci (Npr. class) podijeliti jednu instancu kroz viลกe referenci.
| svojstvo | Vrsta vrijednosti (struct, enum) |
Vrsta reference (klasa) |
|---|---|---|
| Ponaลกanje pamฤenja | Kopirano prilikom zadaฤe | Dijeljena referenca |
| Upotrijebite sluฤaj | Modeli podataka, lagani podaci | Objekti, dijeljeno stanje |
| Nasljeฤivanje | Nije podrลพano | Podrลพano |
| Primjer | struct Point { โฆ } |
class Person { โฆ } |
Primjer:
struct Score { var value: Int }
var first = Score(value: 10)
var second = first
second.value = 20
print(first.value) // 10 (unchanged)
Ovo pokazuje kako promjene kopije ne utjeฤu na original za vrijednosne tipove.
5) ล to je automatsko brojanje referenci (ARC)? Kako funkcionira u Swift?
Automatsko brojanje referenci (ARC) je Swift'S sustav za upravljanje memorijom koji automatski upravlja alokacijom i dealokacijom memorije za instance klase. Kada se instanca kreira, ARC tracks koliko referenci pokazuje na nju. Kada broj referenci padne na nulu, instanca se dealocira.
Kljuฤne toฤke:
- Snaลพne reference poveฤati broj referenci.
- Slabe ili neposjedovane reference ne poveฤavajte broj i sprijeฤite cikluse zadrลพavanja, ลกto moลพe uzrokovati curenje memorije u iOS aplikacijama.
Primjer: Uobiฤajeni ciklus zadrลพavanja dogaฤa se kada dva objekta imaju jake reference jedan na drugi. Koriลกtenje weak or unowned kljuฤne rijeฤi mogu prekinuti ovaj ciklus.
6) ล to je opcionalno ulanฤavanje?
Ulanฤavanje opcionalnih elemenata je saลพet naฤin ispitivanja i pozivanja svojstava, metoda i indeksa na opcionalnom elementu koji trenutno moลพe biti nilAko opcionalna vrijednost sadrลพi vrijednost, poziv je uspjeลกan; ako je nil, cijeli lanac se vraฤa nil bez sudara.
Primjer:
let text: String? = "Hello" let count = text?.count // count is an Optional<Int>
Ova tehnika izbjegava prisilno raspakiranjeping (!), ลกto dovodi do sigurnijeg koda s manje ruลกenja.
7) Po ฤemu se guard naredbe razlikuju od if naredbi u Swift?
The guard Naredba se koristi za rani izlaz ako uvjet nije ispunjen. Mora izaฤi iz trenutnog opsega (s return, break, continue, ili throw) kada uvjet ne uspije. To potiฤe jasno rukovanje nevaลพeฤim stanjima unaprijed.
Primjer:
func checkUsername(_ name: String?) {
guard let safeName = name else {
print("Username was nil")
return
}
print("User: \(safeName)")
}
Za razliku od if izjava koja ugnijezdi logiku, guard pomaลพe u izravnavanju koda i poboljลกanju ฤitljivosti.
8) ล to su zatvaranja u SwiftKako su korisni?
Zatvaranja su samostalni blokovi koda koje se mogu prenositi poput vrijednosti i koristiti kao rukovatelji povratnim pozivima, rukovatelji dovrลกetka ili prilagoฤena logika operacija. Sliฤne su lambda funkcijama ili anonimnim funkcijama u drugim jezicima.
Primjer:
let sumClosure = { (a: Int, b: Int) -> Int in
return a + b
}
print(sumClosure(5, 7)) // 12
Zatvaranja hvataju vrijednosti iz svog okolnog konteksta, omoguฤujuฤi moฤne asinhrone i funkcionalne obrasce programiranja.
9) Objasnite generiฤke lijekove u Swift i njihovu vaลพnost.
Generiฤki tipovi vam omoguฤuju pisanje fleksibilnih, viลกekratno upotrebljivih funkcija i tipova koji raditi s bilo kojom vrstom uz odrลพavanje sigurnosti tipova. ล iroko se koriste u Swift standardna biblioteka (npr. Array, Dictionary, Itd.).
Primjer:
func swapValues<T>(_ a: inout T, _ b: inout T) {
let temp = a
a = b
b = temp
}
Generiฤki kodovi poboljลกavaju ponovnu upotrebu koda i smanjuju dupliciranje, omoguฤujuฤi vam pisanje moฤnih absctracsigurno.
10) Koja je razlika izmeฤu mapiranja, filtriranja i smanjenja u Swift?
Ove funkcije su dio Swift'S usluลพni programi za funkcionalno programiranje o kolekcijama:
- karta: Transformira svaki element.
- filtar: Odabire elemente koji zadovoljavaju uvjet.
- smanjiti: Kombinira sve elemente u jednu vrijednost.
Primjer:
let numbers = [1, 2, 3, 4, 5]
let squares = numbers.map { $0 * $0 } // [1,4,9,16,25]
let evens = numbers.filter { $0 % 2 == 0 } // [2,4]
let sum = numbers.reduce(0, +) // 15
Ovi alati omoguฤuju ekspresivnu i konciznu obradu podataka u Swift kolekcije.
11) Kako funkcionira zakljuฤivanje o tipovima u Swift, i koje su njegove prednosti?
Zakljuฤivanje tipa u Swift je znaฤajka kompajlera koja automatski odreฤuje tip podataka varijable ili konstante na temelju vrijednosti koja joj je dodijeljena. To omoguฤuje programerima pisanje ฤiลกฤeg i ฤitljivijeg koda bez izriฤitog navoฤenja tipova u mnogim situacijama. SwiftKompajler analizira dodijeljeni izraz i zakljuฤuje najprikladniji tip tijekom kompajliranja, osiguravajuฤi sigurnost tipova uz smanjenje detalja.
Primarna prednost zakljuฤivanja tipova je poboljลกana produktivnost programera i smanjeni broj standardnog koda. Takoฤer minimizira redundanciju, ฤineฤi Swift kod je izraลพajniji i bliลพi prirodnom jeziku. Unatoฤ tome ลกto je implicitno, zakljuฤivanje o tipovima ne ugroลพava sigurnost jer Swift ostaje statiฤki tipiziran jezik.
Primjer:
let count = 10 // Inferred as Int let message = "Hi" // Inferred as String let price = 19.99 // Inferred as Double
Zakljuฤivanje tipova besprijekorno funkcionira s genericima, zatvaraฤima i kolekcijama, omoguฤujuฤi Swift kako bi se odrลพala jasnoฤa ฤak i u sloลพenim izrazima.
12) ล to su protokoli u Swift, i po ฤemu se razlikuju od suฤelja u drugim jezicima?
Protokoli u Swift definirati nacrt metoda, svojstava i zahtjeva koje moraju implementirati usklaฤeni tipovi. Oni su kljuฤni za Protokolno orijentirano programiranje (POP), paradigma koju snaลพno potiฤe SwiftZa razliku od tradicionalnih suฤelja u nekim jezicima, Swift protokoli mogu pruลพiti zadane implementacije putem proลกirenja protokola.
Protokole mogu usvojiti klase, strukture i nabrajanja, ลกto ih ฤini fleksibilnijima od ABS-a temeljenih na nasljeฤivanju.traccije. Takoฤer podrลพavaju viลกestruke konformnosti, za razliku od jednostrukog nasljeฤivanja u klasama.
Primjer:
protocol Drivable {
var speed: Int { get }
func drive()
}
extension Drivable {
func drive() {
print("Driving at speed \(speed)")
}
}
Ovaj pristup potiฤe labavo povezivanje, testabilnost i logiku ponovne upotrebe meฤu nepovezanim tipovima, ฤineฤi protokole moฤnijima od klasiฤnih suฤelja.
13) Objasnite razliku izmeฤu strukture i klase u Swift s primjerima.
Razlika izmeฤu struct i class in Swift prvenstveno leลพi u semantika vrijednosti naspram semantike referenciStrukture su vrijednosni tipovi, ลกto znaฤi da se kopiraju prilikom dodjeljivanja ili prosljeฤivanja. Klase su referentni tipovi, ลกto znaฤi da viลกe referenci moลพe pokazivati โโna istu instancu.
| Aspekt | struct | Klasa |
|---|---|---|
| Tip | Vrsta vrijednosti | Referentni tip |
| memorija | Kopirano | Zajedniฤka |
| Nasljeฤivanje | Nije podrลพano | Podrลพano |
| ARC | Ne koristi se | Polovan |
| Promjenjivost | Zahtijeva mutating |
Nepotrebno |
Primjer:
struct User {
var name: String
}
var user1 = User(name: "Alice")
var user2 = user1
user2.name = "Bob"
Ovdje, user1 ostaje nepromijenjen. Ova predvidljivost ฤini strukture idealnim za modele i spremnike podataka.
14) Koji je ลพivotni ciklus iOS aplikacije napisane u Swift?
ลฝivotni ciklus iOS aplikacije definira razliฤita stanja kroz koja aplikacija prolazi od pokretanja do zavrลกetka. Razumijevanje ovog ลพivotnog ciklusa kljuฤno je za upravljanje resursima, rukovanje pozadinskim zadacima i reagiranje na sistemske dogaฤaje.
Kljuฤne faze ลพivotnog ciklusa ukljuฤuju:
- Pokretanje aplikacije
- Aktivno stanje
- Stanje u pozadini
- Suspendirano stanje
- Zavrลกeno stanje
Swift aplikacije obraฤuju ove prijelaze prvenstveno putem AppDelegate i SceneDelegat metode. Na primjer, application(_:didFinishLaunchingWithOptions:) koristi se za poฤetno postavljanje, dok sceneDidEnterBackground(_:) koristi se za oslobaฤanje dijeljenih resursa.
Primjer upotrebe: Kada korisnik primi telefonski poziv, aplikacija se premjeลกta u pozadinu. Razvojni programeri moraju spremiti korisniฤke podatke i pauzirati tekuฤe zadatke kako bi osigurali nesmetano iskustvo kada se aplikacija nastavi pokretati.
15) ล to su promatraฤi imovine u Swift, i kada ih treba koristiti?
Promatraฤi nekretnina u Swift omoguฤuju programerima praฤenje i reagiranje na promjene vrijednosti nekretnine. Implementiraju se pomoฤu willSet i didSet, koji se izvrลกavaju prije i nakon promjene svojstva.
Promatraฤi svojstava korisni su za pokretanje nuspojava kao ลกto su aลพuriranje korisniฤkog suฤelja, provjera ulaznih podataka ili sinkronizacija podataka kada se vrijednosti promijene.
Primjer:
var score: Int = 0 {
willSet {
print("Score will change to \(newValue)")
}
didSet {
print("Score changed from \(oldValue)")
}
}
Promatraฤi se ne izvrลกavaju tijekom inicijalizacije, ลกto sprjeฤava neoฤekivano ponaลกanje prilikom stvaranja objekta. Najprikladniji su za jednostavnu logiku praฤenja, a ne za teลกka izraฤunavanja.
16) Kako funkcionira obrada greลกaka u Swift?
Swift koristi strukturirani model za rjeลกavanje greลกaka temeljen na bacanje, hvatanje i ลกirenje greลกakaPogreลกke moraju biti u skladu s Error protokol i obraฤuju se pomoฤu do-try-catch blokovi.
Kljuฤne komponente ukljuฤuju:
throwskljuฤna rijeฤ za funkcijetry,try?itry!- Prilagoฤeni nabrojani pogreลกci
Primjer:
enum LoginError: Error {
case invalidCredentials
}
func login(user: String) throws {
throw LoginError.invalidCredentials
}
Ovaj pristup provodi eksplicitnu obradu pogreลกaka i poboljลกava pouzdanost sprjeฤavanjem tihih kvarova, ฤineฤi Swift aplikacije robusnije i odrลพivije.
17) ล to je injekcija ovisnosti u Swift, i zaลกto je to vaลพno?
Ubrizgavanje ovisnosti (DI) je obrazac dizajna u kojem objekt prima svoje ovisnosti iz vanjskog izvora umjesto da ih stvara interno. Swift, DI poboljลกava modularnost, testabilnost i fleksibilnost koda.
Vrste injekcije ovisnosti ukljuฤuju:
- Injektiranje konstruktora
- Ubrizgavanje imovine
- Metoda injekcije
Primjer:
class NetworkService { }
class ViewModel {
let service: NetworkService
init(service: NetworkService) {
self.service = service
}
}
Ubrizgavanjem ovisnosti, programeri mogu lako mijenjati implementacije, poput laลพnih usluga tijekom testiranja, bez promjene osnovne logike. DI se ลกiroko koristi u skalabilnim Swift aplikacija.
18) Objasnite prednosti i nedostatke koriลกtenja zatvaraฤa u Swift.
Zatvaranja su moฤni alati u Swift, ali dolaze s i prednostima i nedostacima.
| Prednosti | Nedostaci |
|---|---|
| Saลพeta sintaksa | Moลพe smanjiti ฤitljivost |
| Omoguฤuje asinkrone povratne pozive | Rizik od ciklusa zadrลพavanja |
| Snima kontekst | Sloลพenost otklanjanja pogreลกaka |
| Funkcionalno programiranje | Prekomjerna upotreba moลพe zbuniti protok |
Zatvaranja se obiฤno koriste za rukovatelje dovrลกavanjem, animacije i funkcionalne transformacije. Meฤutim, nepravilna upotreba, posebno kod snaลพnih snimanja referenci, moลพe dovesti do curenja memorije. Koriลกtenje [weak self] or [unowned self] ublaลพava ovaj rizik.
Zatvaraฤe treba koristiti promiลกljeno kako bi se uravnoteลพila ekspresivnost i odrลพivost.
19) Koja je razlika izmeฤu slabih i neovlaลกtenih referenci u Swift?
Oboje weak i unowned reference se koriste kako bi se sprijeฤilo zadrลพavanje ciklusa pod ARC-om. Kljuฤna razlika je u naฤinu na koji rjeลกavaju dealokaciju.
| Aspekt | slab | bezvlasniฤki |
|---|---|---|
| Izborni | Da | Ne |
| Postavljeno na nulu | Automatsko | Ne |
| Sigurnosni | sigurnije | Opasno ako se zloupotrebljava |
| Upotrijebite sluฤaj | delegati | Zajamฤeni vijek trajanja |
Primjer:
weak var delegate: SomeDelegate?
weak je poลพeljniji kada referencirani objekt moลพe postati nil. unowned treba koristiti samo kada je ลพivotni ciklus zajamฤen, kao ลกto su odnosi roditelj-dijete.
20) Kako funkcionira istodobnost u Swift koristeฤi GCD i async/await?
Swift podrลพava istodobnost putem Grand Central Dispatch (GCD) i novije asinkroni/ฤekaj model. GCD koristi redove ฤekanja za upravljanje pozadinskim zadacima, dok async/await pruลพa ฤitljiviji i strukturiraniji pristup istodobnosti.
Primjer (async/await):
func fetchData() async throws -> String {
return "Data loaded"
}
Async/await eliminira ugnijeลพฤivanje povratnih poziva, poboljลกava ฤitljivost i smanjuje kod sklon greลกkama. GCD je i dalje koristan za upravljanje zadacima niske razine, ali moderni Swift razvoj sve viลกe favorizira strukturiranu konkurentnost.
21) Koje su razine kontrole pristupa u Swift, i zaลกto su oni vaลพni?
Kontrola pristupa u Swift ograniฤava naฤin pristupa entitetima koda kao ลกto su klase, metode, svojstva i varijable iz razliฤitih dijelova programa. To je kljuฤna znaฤajka za izgradnju sigurnih, odrลพivih i modularnih aplikacija. Swift osigurava pet razina kontrole pristupa koji definiraju opseg vidljivosti.
| Razina pristupa | Djelokrug |
|---|---|
open |
Pristupaฤan i podklasibilan vanjski modul |
public |
Pristupaฤni vanjski modul |
internal |
Zadano, dostupno unutar modula |
fileprivate |
Dostupno unutar iste datoteke |
private |
Dostupno unutar iste deklaracije |
Kontrola pristupa sprjeฤava nenamjernu upotrebu interne logike i provodi arhitektonske granice. Na primjer, oznaฤavanje pomoฤnih metoda kao private osigurava da ih vanjski pozivatelji ne zloupotrijebe. To postaje posebno vaลพno u velikim kodnim bazama i okvirima.
22) Objasnite razliku izmeฤu modifikatora otvorenog i javnog pristupa u Swift.
Iako open i public Iako izgledaju sliฤno, znaฤajno se razlikuju kada je u pitanju podklasiranje i nadjaฤavanje. Oba dopuลกtaju pristup izvan definirajuฤeg modula, ali samo open dopuลกta nasljeฤivanje i nadjaฤavanje metoda izvan modula.
| svojstvo | otvaramo | javni |
|---|---|---|
| Pristupaฤni vanjski modul | Da | Da |
| Vanjski modul koji se moลพe podklasirati | Da | Ne |
| Vanjski modul koji se moลพe nadjaฤati | Da | Ne |
Primjer upotrebe: Razvojni programeri okvira koriste public kada ลพele otkriti funkcionalnost, ali sprijeฤiti prilagodbu. open koristi se kada je namijenjena proลกirivost, kao ลกto su UI okviri koji omoguฤuju prilagodbu podklasa.
Ova razlika omoguฤuje Swift uravnoteลพiti sigurnost s proลกirivoลกฤu u dizajnu API-ja.
23) ล to je lijena inicijalizacija u Swift, i kada ga treba koristiti?
Lijena inicijalizacija odgaฤa stvaranje svojstva dok mu se prvi put ne pristupi. Swift, to se postiลพe koriลกtenjem lazy kljuฤna rijeฤ i ฤesto se koristi za poboljลกanje performansi i smanjenje nepotrebne upotrebe memorije.
Primjer:
class DataManager {
lazy var dataSource = loadData()
func loadData() -> [String] {
return ["A", "B", "C"]
}
}
Lijena svojstva su posebno korisna kada je inicijalizacija skupa, poput uฤitavanja datoteka, mreลพnih zahtjeva ili veza s bazom podataka. Uvijek se moraju deklarirati kao varijable (var) jer im se vrijednost postavlja nakon inicijalizacije.
Lijena inicijalizacija poboljลกava performanse pokretanja i uฤinkovitost resursa kada se koristi na odgovarajuฤi naฤin.
24) ล to su ekstenzije u Swift, i koje probleme rjeลกavaju?
Proลกirenja omoguฤuju programerima dodavanje novih funkcionalnosti postojeฤim tipovima bez mijenjanja njihove izvorne implementacije. Swift Proลกirenja mogu dodavati metode, izraฤunata svojstva, usklaฤenost protokola i ugnijeลพฤene tipove.
Primjer:
extension Int {
func squared() -> Int {
return self * self
}
}
Proลกirenja potiฤu ฤiลกฤu organizaciju koda po grupamaping povezane funkcionalnosti. Posebno su korisni prilikom prilagoฤavanja tipova protokolima ili dodavanja pomoฤnih metoda. Za razliku od podklasa, proลกirenja ne podrลพavaju pohranjena svojstva, ลกto odrลพava sigurnost memorije.
Proลกirenja pomaลพu u odrลพavanju modularnosti, ฤitljivosti i odrลพivosti koda, posebno u velikim projektima.
25) Objasnite razliku izmeฤu statiฤkih i klasnih metoda u Swift.
Oboje static i class Kljuฤne rijeฤi definiraju metode na razini tipa, ali njihovo ponaลกanje se razlikuje u scenarijima nasljeฤivanja.
| Rijeฤ | Moลพe se poniลกtiti | Upotreba |
|---|---|---|
| statiฤki | Ne | Fiksna implementacija |
| razred | Da | Dizajnirano za podklasiranje |
Primjer:
class Vehicle {
class func type() -> String {
return "Vehicle"
}
}
Koristiti static kada ponaลกanje treba ostati nepromijenjeno u svim podklasama. Koristite class kada je potreban polimorfizam. Ova razlika je vaลพna u dizajnu okvira i API-ja gdje su odluke o proลกirivosti vaลพne.
26) Koje su funkcije viลกeg reda u SwiftOdgovorite s primjerima.
Funkcije viลกeg reda su funkcije koje ili prihvaฤaju druge funkcije kao parametre ili vraฤaju funkcije kao rezultate. Swift snaลพno podrลพava ovaj koncept kroz zatvaranja i metode naplate.
Uobiฤajene funkcije viลกeg reda ukljuฤuju:
mapfilterreducecompactMapflatMap
Primjer:
let values = [1, 2, 3, 4]
let doubled = values.map { $0 * 2 }
Funkcije viลกeg reda poboljลกavaju ekspresivnost koda i smanjuju imperativne standarde. ล iroko se koriste u funkcionalnom programiranju i temeljne su za pisanje ฤistih, deklarativnih kodova. Swift kodirati.
27) ล to je ciklus zadrลพavanja i kako ga se moลพe sprijeฤiti u Swift?
Ciklus zadrลพavanja se dogaฤa kada dvije ili viลกe instanci klase imaju jake reference jedna na drugu, sprjeฤavajuฤi ARC da ih dealocira. To rezultira curenjem memorije.
Uobiฤajeni scenarij:
Snimanje zatvaranja self snaลพno unutar klasa.
Tehnike prevencije:
- Koristiti
weakreference - Koristiti
unownedreference - Popisi za hvatanje u zatvaranjima
Primjer:
someClosure = { [weak self] in
self?.doSomething()
}
Razumijevanje ciklusa zadrลพavanja kljuฤno je za izgradnju memorijski uฤinkovitih iOS aplikacija, posebno pri radu sa zatvaraฤima i delegatima.
28) Objasnite razliku izmeฤu sinkronog i asinkronog koda u Swift.
SyncHronski kod blokira izvrลกavanje dok se zadatak ne zavrลกi, dok asinhroni kod omoguฤuje nastavak izvrลกavanja dok se zadatak izvrลกava u pozadini.
| Aspekt | Synchronozan | asinhron |
|---|---|---|
| Izvrลกenje | Blokiranje | Non-blokiranje |
| Izvoฤenje | Sporiji UI | Prilagodljivo korisniฤko suฤelje |
| Upotrijebite sluฤaj | Jednostavni zadaci | Mreลพni pozivi |
Swift obraฤuje asinhrono programiranje pomoฤu GCD, rukovatelji dovrลกavanjemi asinkroni/ฤekajAsinkroni kod je kljuฤan za odrลพavanje glatkog korisniฤkog iskustva u stvarnim aplikacijama.
29) ล to je kodabilno u Swift, i zaลกto je to korisno?
Codable je protokol koji omoguฤuje jednostavno kodiranje i dekodiranje podataka izmeฤu Swift objekte i vanjske reprezentacije kao ลกto su JSON ili popisi svojstava. Kombinira Encodable i Decodable.
Primjer:
struct User: Codable {
let id: Int
let name: String
}
Codable smanjuje standardni kod i poboljลกava pouzdanost pri rukovanju API-jima. Osigurava sigurnost tipova i besprijekorno se integrira s Swiftstandardnu โโbiblioteku, ลกto je ฤini preferiranim rjeลกenjem za serijalizaciju podataka.
30) Koje su kljuฤne razlike izmeฤu niza, skupa i rjeฤnika u Swift?
Swift nudi tri primarne vrste kolekcija, svaka optimizirana za razliฤite sluฤajeve upotrebe.
| Kolekcija | ลฝ | Jedinstvene vrijednosti | Na temelju kljuฤa |
|---|---|---|---|
| Poredak | Da | Ne | Ne |
| Postaviti | Ne | Da | Ne |
| Rjeฤnik | Ne | Jedinstveni kljuฤevi | Da |
Odabir ispravne kolekcije poboljลกava performanse i jasnoฤu. Nizovi su najbolji za ureฤene podatke, skupovi za jedinstvenost, a rjeฤnici za brzo pretraลพivanje na temelju kljuฤeva.
31) ล to je protokolno orijentirano programiranje u Swift, i zaลกto je poลพeljnije od nasljeฤivanja?
Protokolno orijentirano programiranje (POP) je temeljna filozofija dizajna u Swift koji naglaลกava definiranje ponaลกanja pomoฤu protokola, a ne oslanjanje na nasljeฤivanje klasa. U POP-u, protokoli definiraju ลกto tip moลพe uฤiniti, a proลกirenja protokola pruลพaju zadane implementacije. Ovaj pristup izbjegava mnoge probleme povezane s dubokim hijerarhijama nasljeฤivanja, kao ลกto su ฤvrsto povezivanje i krhke osnovne klase.
POP radi sa strukturama, nabrajanjima i klasama, ลกto ga ฤini fleksibilnijim od objektno orijentiranog nasljeฤivanja. Takoฤer potiฤe kompoziciju umjesto nasljeฤivanja, ลกto poboljลกava testabilnost i skalabilnost.
Primjer: Swiftstandardne tipove biblioteka kao ลกto su Array i Dictionary uvelike se oslanjaju na protokole poput Sequence i Collection, demonstrirajuฤi kako POP omoguฤuje viลกekratnu upotrebu i dosljedno ponaลกanje meฤu nepovezanim tipovima.
32) Objasnite razliku izmeฤu obrazaca delegiranja i obavjeลกtavanja u iOS-u koristeฤi Swift.
Delegiranje i obavjeลกtavanje su dva uobiฤajena komunikacijska obrasca u razvoju iOS-a. Delegiranje uspostavlja jedan-na-jedan odnos u kojem jedan objekt komunicira s drugim putem protokola. Obavijesti slijede jedan-prema-viลกe model u kojem viลกe promatraฤa moลพe sluลกati dogaฤaje.
| Aspekt | delegacija | Obavijest |
|---|---|---|
| Odnos | Jedan na jedan | Jedan prema viลกe |
| Coupling | Tijesan | Labav |
| Izvoฤenje | Brลพe | Neลกto sporije |
| Upotrijebite sluฤaj | Radnje korisnika | Globalni dogaฤaji |
Delegiranje je idealno za rukovanje korisniฤkim interakcijama, dok su obavijesti prikladnije za emitiranje promjena na razini cijelog sustava, poput izgleda tipkovnice.
33) Koja je razlika izmeฤu okvira i granica u Swift Razvoj korisniฤkog suฤelja?
frame i bounds definirati veliฤinu i poloลพaj prikaza, ali u razliฤitim koordinatnim sustavima. frame je relativan u odnosu na superview, dok bounds je relativan u odnosu na sam pogled.
| Svojstvo | okvir | granice |
|---|---|---|
| Koordinatni sustav | Roditeljski prikaz | Vlastiti pogled |
| Ukljuฤena pozicija | Da | Ne |
| Pod utjecajem transformacija | Da | Ne |
Razumijevanje ove razlike kljuฤno je pri izvoฤenju animacija, transformacija ili prilagoฤenih operacija crtanja.
34) Kako funkcionira automatski raspored u Swift, a koja su ograniฤenja?
Auto Layout je sustav izgleda koji dinamiฤki izraฤunava veliฤine i poloลพaje prikaza na temelju ograniฤenja. Ograniฤenja definiraju odnose kao ลกto su razmak, poravnanje i omjeri veliฤina izmeฤu elemenata korisniฤkog suฤelja.
Automatski raspored prilagoฤava rasporede razliฤitim veliฤinama zaslona, โโorijentacijama i postavkama pristupaฤnosti. Ograniฤenja se mogu definirati pomoฤu Interface Buildera, sidriลกta ili programski.
Primjer:
view.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true
Automatski raspored osigurava responzivan i adaptivan dizajn korisniฤkog suฤelja, ลกto je kljuฤno za moderne iOS aplikacije.
35) Koja su generiฤka ograniฤenja u SwiftOdgovorite s primjerima.
Generiฤka ograniฤenja ograniฤavaju tipove koji se mogu koristiti s genericima, poboljลกavajuฤi sigurnost tipova. Ograniฤenja mogu zahtijevati da tip bude u skladu s protokolom ili nasljeฤuje odreฤenu klasu.
Primjer:
func printValues<T: Comparable>(_ a: T, _ b: T) {
print(max(a, b))
}
Generiฤka ograniฤenja su kljuฤna za pisanje viลกekratnih, ali kontroliranih ABS-ovatraccije. Omoguฤuju programerima da provedu zahtjeve ponaลกanja uz odrลพavanje fleksibilnosti.
36) Objasnite razliku izmeฤu teksta, jakog i slabog u Swift upravljanje memorijom.
Ove kljuฤne rijeฤi definiraju kako se reference upravljaju u ARC-u.
| Upuฤivanje | Zadrลพi broj | Koristite sluฤaj |
|---|---|---|
| jak | poveฤava | Zadano vlasniลกtvo |
| slab | Nema poveฤanja | Izbjegavajte cikluse zadrลพavanja |
| kopija | Stvara novo | Izolacija vrijednosti |
copy se obiฤno koristi s kolekcijama ili nizovima znakova kako bi se osigurala nepromjenjivost, dok weak je kljuฤan za obrasce delegata.
37) ล to je uvoฤenje metoda Swift, a kada ga treba izbjegavati?
Prebacivanje metoda je tehnika izvoฤenja koja mijenja implementaciju postojeฤe metode. Iako je moฤna, opasna je i ne preporuฤuje se u Swift jer zaobilazi sigurnost u vrijeme kompajliranja.
Premoลกฤivanje moลพe dovesti do nepredvidivog ponaลกanja, prekida aลพuriranja sustava i komplicirati otklanjanje pogreลกaka. Treba ga koristiti samo u kontroliranim scenarijima kao ลกto su analitika ili okviri za otklanjanje pogreลกaka.
SwiftNaglasak na sigurnost i statiฤki raspored ฤini pijenje alkohola krajnjom mjerom.
38) Kako se Swift rjeลกavati sigurnost niti i utrke podataka?
Swift obraฤuje konkurentnost koristeฤi GCD, brave i moderne Swift Model konkurentnostiAkteri su kljuฤna znaฤajka koja omoguฤuje izolaciju podataka osiguravajuฤi da samo jedan zadatak moลพe pristupiti promjenjivom stanju istovremeno.
Primjer:
actor Counter {
var value = 0
func increment() {
value += 1
}
}
Akteri pojednostavljuju sigurnost niti i smanjuju vjerojatnost utrka podataka, ฤineฤi konkurentno programiranje sigurnijim i pristupaฤnijim.
39) Koja je razlika izmeฤu @escaping i ne-bjeลพanjeping zatvaranja u Swift?
Zatvaranja su neizbjeลพnaping prema zadanim postavkama, ลกto znaฤi da se izvrลกavaju unutar opsega funkcije. Escaping zatvaranja nadลพivljavaju poziv funkcije i moraju biti eksplicitno oznaฤena s @escaping.
| Aspekt | Ne-Escaping | Escaping |
|---|---|---|
| ลฝivot | Kratak | Dug |
| Izvoฤenje | Brลพe | Lagani nadzemni dio |
| Upotrijebite sluฤaj | Neposredna logika | Asinkroni povratni pozivi |
Razumijevanje eskaleping Zatvaranja su kljuฤna za upravljanje memorijom i izbjegavanje ciklusa zadrลพavanja.
40) Koje su prednosti i nedostaci koriลกtenja SwiftUI u usporedbi s UIKitom?
SwiftUI je deklarativni UI okvir koji je uveo Apple, dok je UIKit imperativ.
| SwiftPrednosti korisniฤkog suฤelja | SwiftNedostaci korisniฤkog suฤelja |
|---|---|
| Less predloลพak | Ograniฤena podrลกka unatrag |
| Pregledi uลพivo | Less zreo |
| Deklarativna sintaksa | Manje kuka za prilagodbu |
SwiftUI ubrzava razvoj, ali UIKit ostaje neophodan za sloลพene ili naslijeฤene aplikacije. Mnoge produkcijske aplikacije koriste hibridni pristup.
๐ Vrh Swift Pitanja za intervju sa stvarnim scenarijima i strateลกkim odgovorima
1) Koje su kljuฤne znaฤajke Swift ลกto ga razlikuje od Objective-C-a?
Oฤekivano od kandidata: Ispitivaฤ ลพeli procijeniti vaลกe razumijevanje Swift osnove i zaลกto je preferiran za moderni iOS razvoj.
Primjer odgovora: Swift Nudi snaลพnu sigurnost tipova, opcionalne opcije za sprjeฤavanje pogreลกaka nultih referenci, automatsko upravljanje memorijom putem ARC-a i poboljลกanu ฤitljivost s ฤistom sintaksom. Takoฤer pruลพa moฤne znaฤajke kao ลกto su vrijednosni tipovi, programiranje orijentirano na protokol i usklaฤivanje uzoraka, ลกto aplikacije ฤini sigurnijima i lakลกima za odrลพavanje u usporedbi s Objective-C-om.
2) Moลพete li objasniti razliku izmeฤu vrijednosnih tipova i referentnih tipova u Swift?
Oฤekivano od kandidata: Anketar provjerava vaลกe razumijevanje upravljanja memorijom i ponaลกanja podataka u Swift.
Primjer odgovora: Tipovi vrijednosti, poput struktura i nabrajanja, kopiraju se kada im se dodijeli ili prosljeฤuje, ฤime se osigurava izolacija podataka. Tipovi referenci, poput klasa, dijele istu memorijsku referencu, ลกto znaฤi da promjene na jednom mjestu utjeฤu na sve reference. Odabir izmeฤu njih ovisi o tome je li potrebno zajedniฤko promjenjivo stanje.
3) Kako funkcioniraju opcionalne opcije u Swift, i zaลกto su oni vaลพni?
Oฤekivano od kandidata: Anketar ลพeli znati kako sigurno rukujete s nil vrijednostima i izbjegavate padove tijekom izvoฤenja.
Primjer odgovora: Opcionalne vrijednosti predstavljaju prisutnost ili odsutnost vrijednosti. Vaลพne su jer prisiljavaju programere da eksplicitno obraฤuju sluฤajeve nil koristeฤi opcionalno povezivanje, opcionalno ulanฤavanje ili zaลกtitne naredbe. Ovaj dizajn znaฤajno smanjuje neoฤekivane padove i poboljลกava stabilnost aplikacije.
4) Opiลกite situaciju u kojoj ste koristili protokolno orijentirano programiranje u Swift.
Oฤekivano od kandidata: Ispitivaฤ ลพeli vidjeti kako primjenjujete napredne Swift koncepti u stvarnim projektima.
Primjer odgovora: U prethodnoj ulozi koristio sam programiranje orijentirano na protokole kako bih definirao zajedniฤko ponaลกanje u viลกe modela prikaza. Koriลกtenjem protokola s zadanim implementacijama smanjio sam dupliciranje koda i poboljลกao moguฤnost testiranja, a istovremeno zadrลพao...ping labavo povezane komponente.
5) Kako uฤinkovito upravljate pamฤenjem u Swift aplikacije?
Oฤekivano od kandidata: Anketar procjenjuje vaลกe razumijevanje ARC-a i aspekte uฤinka.
Primjer odgovora: Na prethodnoj poziciji, upravljao sam memorijom paลพljivo koristeฤi slabe i nepoznate reference kako bih izbjegao cikluse zadrลพavanja, posebno u zatvaranjima i obrascima delegata. Takoฤer sam koristio instrumente za identifikaciju curenja memorije i osigurao da su kontroleri prikaza ispravno dealocirani.
6) Kako se rjeลกavaju asinhrone operacije u Swift?
Oฤekivano od kandidata: Anketar ลพeli znati kako upravljate konkurentnoลกฤu i responzivnoลกฤu u aplikacijama.
Primjer odgovora: Obraฤujem asinhrone operacije koristeฤi Grand Central Dispatch i Swift znaฤajke istodobnosti kao ลกto su async i await. Ovi alati mi omoguฤuju da korisniฤko suฤelje ostane responzivno dok se izvrลกavaju pozadinski zadaci poput mreลพnih poziva ili obrade podataka.
7) Opiลกite izazovnu greลกku na koju ste naiลกli u Swift projekt i kako ste ga rijeลกili.
Oฤekivano od kandidata: Ispitivaฤ procjenjuje vaลก pristup rjeลกavanju problema i vjeลกtine otklanjanja pogreลกaka.
Primjer odgovora: Na prethodnom poslu naiลกao sam na pad sustava uzrokovan prisilnim raspakiranjemping opcionalno tijekom mreลพnog odgovora. Rijeลกio sam to uvoฤenjem odgovarajuฤeg opcionalnog povezivanja i dodavanjem obrambenih provjera, ลกto je eliminiralo ruลกenje i poboljลกalo rukovanje greลกkama u cijelom modulu.
8) Kako osiguravate kvalitetu i odrลพivost koda u Swift projekti?
Oฤekivano od kandidata: Anketar ลพeli uvid u vaลกu disciplinu razvoja i prakse timskog rada.
Primjer odgovora: Kvalitetu koda osiguravam slijedeฤi Swift smjernice za stil, pisanje modularnog koda i koriลกtenje smislenih konvencija imenovanja. Takoฤer se oslanjam na preglede koda, jediniฤne testove i dokumentaciju kako bih osigurao da baza koda ostane odrลพiva i razumljiva cijelom timu.
9) Kako biste rijeลกili situaciju u kojoj se znaฤajka mora brzo isporuฤiti, ali zahtjevi nisu jasni?
Oฤekivano od kandidata: Ispitivaฤ ลพeli procijeniti vaลกe komunikacijske vjeลกtine i vjeลกtine donoลกenja odluka pod pritiskom.
Primjer odgovora: Zapoฤeo bih razjaลกnjavanjem kljuฤnih zahtjeva sa zainteresiranim stranama i identificiranjem minimalne odrลพive funkcionalnosti. Zatim bih jasno komunicirao pretpostavke, iterativno implementirao znaฤajku i ostao fleksibilan kako bih ukljuฤio povratne informacije uz poลกtivanje roka.
10) ล to vas motivira za rad s Swift i razvoj iOS-a?
Oฤekivano od kandidata: Ispitivaฤ ลพeli razumjeti vaลกu strast i dugoroฤni interes za tehnologiju.
Primjer odgovora: U mojoj posljednjoj ulozi motiviralo me SwiftFokus tvrtke je na sigurnosti, performansama i modernom dizajnu programskih jezika. Izrada aplikacija koje izravno utjeฤu na korisnike uz rad s ekosustavom koji se neprestano razvija drลพi me angaลพiranim i ลพeljnim rasta kao programera.
