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

Swift Intervjuirajte pitanja i odgovore

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:

  • throws kljuฤna rijeฤ za funkcije
  • try, try?i try!
  • 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:

  • map
  • filter
  • reduce
  • compactMap
  • flatMap

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 weak reference
  • Koristiti unowned reference
  • 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.

Saลพmite ovu objavu uz: