Top 40 Swift Haastattelukysymykset ja vastaukset (2026)

Swift Haastattelukysymykset ja vastaukset

Valmistautuminen a Swift Kehittรคjรคhaastattelu tarkoittaa sen ennakointia, mitรค haastattelijat todella arvioivat syntaksin ulkopuolella. Swift Haastattelukysymykset paljastavat ongelmanratkaisukyvyn, koodauskyvyn ja kรคytรคnnรถn ymmรคrryksen todellisissa tilanteissa.

Nรคmรค roolit avaavat vahvoja urapolkuja iOS:n kรคyttรถรถnoton kasvaessa ja palkitsevat teknisen asiantuntemuksen, toimialaosaamisen ja todellisen tuotantokokemuksen. Kentรคllรค tyรถskentelevรคt ammattilaiset soveltavat analyysejรค, syventรคvรคt osaamistaan, tekevรคt yhteistyรถtรค tiimien kanssa, avustavat esimiehiรค ja kokeneita tyรถntekijรถitรค sekรค vastaavat itsevarmasti yleisiin kysymyksiin ja kysymyksiin niin aloittelijoilta kuin kokeneiltakin ammattilaisilta maailmanlaajuisesti.
Lue lisรครค ...

๐Ÿ‘‰ Ilmainen PDF-lataus: Swift Haastattelukysymykset ja vastaukset

ylin Swift Haastattelukysymykset ja vastaukset

1) Mikรค on Swift ja mikรค tekee siitรค suositun iOS-kehityksessรค?

Swift on Applen kehittรคmรค moderni, korkean tason ohjelmointikieli iOS-sovellusten rakentamiseen, macOS, watchOS ja tvOS. Se korostaa turvallisuus, suorituskyky ja ilmeikkyys, ominaisuuksineen, kuten valinnaiset tyypit, tyypin pรครคttelyja automaattinen muistinhallinta. Swift:n syntaksi on ytimekรคs mutta tehokas, mikรค vรคhentรครค yleisten ohjelmointivirheiden, kuten null-osoittimen viittausten menetysten ja tyyppien epรคsuhtaumien, todennรคkรถisyyttรค. Swift tukee myรถs Protokollakeskeinen ohjelmointi (POP) perinteisten olio-ohjelmointimallien rinnalla, mikรค mahdollistaa modulaarisemman ja uudelleenkรคytettรคvรคn koodin.

Esimerkiksi: Swift'S valinnainen tyyppi kapseloi muuttujan, jolla voi olla arvo tai ei, estรคen odottamattomat ajonaikaiset kaatumiset nil-viittausten vuoksi, jotka ovat yleinen virheiden lรคhde aiemmissa ohjelmointikielissรค, kuten Objective-C:ssรค.


2) Miten muuttujien ja vakioiden mรครคrittely tapahtuu? SwiftMitรค eroa on var- ja let-muuttujalla?

Muuttujan mรครคrittรคminen Swift, kรคytรคt varVakion mรครคrittรคmiseen kรคytetรครคn let. muuttuja (var) voi muuttaa arvoaan sen mรครคrittรคmisen jรคlkeen, kun taas vakio (let) ei voida mรครคrittรครค uudelleen alustuksen jรคlkeen โ€“ mikรค edistรครค turvallisempaa ja ennustettavampaa koodia.

Esimerkiksi:

var age = 25      // Variable
let name = "John" // Constant, value cannot change

Jos yritรคt mรครคrittรครค arvon uudelleen let vakio, kรครคntรคjรค heittรครค virheen. Tรคmรค ero pakottaa muuttumattomuuden oletusarvoisesti aina kun mahdollista, mikรค parantaa ohjelman vakautta.


3) Mitรค ovat valinnaiset ominaisuudet Swift ja miksi ne ovat tรคrkeitรค?

Valinnaiset vaihtoehdot Swift ovat a kielen ominaisuus, joka ilmaisee mahdollisuuden, ettรค muuttujalla ei ole arvoaSen sijaan, ettรค implisiittisesti oletettaisiin, ettรค muuttuja sisรคltรครค aina dataa, Swift kรคyttรครค ? syntaksi, joka osoittaa, ettรค muuttuja voi olla nil, mikรค tekee koodista turvallisemman pakottamalla kehittรคjรคn eksplisiittisesti purkamaan tai kรคsittelemรครคn arvon puuttumisen.

Esimerkiksi:

var number: Int? = nil // This variable might hold an Int or nil

if let safeNumber = number {
    print(safeNumber)
} else {
    print("No value present")
}

Valinnaiset auttavat havaitsemaan virheitรค kรครคnnรถsaikana, jotka muuten ilmenisivรคt ajonaikana.


4) Mitรค eroa on arvotyypeillรค ja viittaustyypeillรค? Swift?

In Swift, arvotyypit (kuten struct, enum, tuple) tallenna ainutlaatuinen kopio dataa, kun taas viitetyypit (kuten class) jaa yksittรคinen esiintymรค useiden viitteiden kautta.

Ominaisuus Arvotyyppi (struct, enum) Viitetyyppi (luokka)
Muistin kรคyttรคytyminen Kopioitu tehtรคvรคssรค Jaettu viite
Kรคytรค tapausta Datamallit, kevyt data Objektit, jaettu tila
Perintรถ Ei tuettu Tuetut
esimerkki struct Point { โ€ฆ } class Person { โ€ฆ }

Esimerkiksi:

struct Score { var value: Int }
var first = Score(value: 10)
var second = first
second.value = 20
print(first.value) // 10 (unchanged)

Tรคmรค osoittaa, kuinka kopion muutokset eivรคt vaikuta alkuperรคiseen arvotyyppien osalta.


5) Mikรค on automaattinen viitelaskenta (ARC)? Miten se toimii? Swift?

Automaattinen viitelaskenta (ARC) on Swift'S muistinhallintajรคrjestelmรค joka hallitsee automaattisesti muistin allokointia ja vapautusta luokkainstanssien osalta. Kun instanssi luodaan, ARC tracks kuinka monta viittausta siihen osoittaa. Kun viittausten mรครคrรค putoaa nollaan, instanssi vapautetaan.

Avainkohdat:

  • Vahvat viittaukset lisรครค viitemรครคrรครค.
  • Heikot tai omistamattomat viitteet ร„lรค lisรครค lukumรครคrรครค ja auta estรคmรครคn sรคilytyssyklejรค, jotka voivat aiheuttaa muistivuotoja iOS-sovelluksissa.

Esimerkiksi: Yleinen sรคilytyssykli tapahtuu, kun kahdella objektilla on vahvat viittaukset toisiinsa. weak or unowned avainsanat voivat katkaista tรคmรคn kierteen.


6) Mitรค on valinnainen ketjutus?

Valinnainen ketjutus on ytimekรคs tapa kysellรค ja kutsua ominaisuuksia, metodeja ja alaindeksejรค valinnaisessa objektissa, joka saattaa olla tรคllรค hetkellรค nilJos valinnainen sisรคltรครค arvon, kutsu onnistuu; jos se on nil, koko ketju palaa nil kaatumatta.

Esimerkiksi:

let text: String? = "Hello"
let count = text?.count // count is an Optional<Int>

Tรคmรค tekniikka vรคlttรครค pakotetun purkamisenping (!), mikรค johtaa turvallisempaan koodiin ja vรคhemmiin kaatumuksiin.


7) Miten guard-lausekkeet eroavat if-lausekkeista? Swift?

guard lauseketta kรคytetรครคn aikaiseen poistumiseen, jos ehto ei tรคyty. Sen on poistuttava nykyisestรค alueesta (jossa on return, break, continuetai throw), kun ehto epรคonnistuu. Tรคmรค edistรครค virheellisten tilojen selkeรครค kรคsittelyรค etukรคteen.

Esimerkiksi:

func checkUsername(_ name: String?) {
    guard let safeName = name else {
        print("Username was nil")
        return
    }
    print("User: \(safeName)")
}

Toisin kuin if lause, joka sisรคltรครค sisรคkkรคistรค logiikkaa, guard auttaa litistรคmรครคn koodia ja parantamaan luettavuutta.


8) Mitรค ovat sulkemiset SwiftMiten ne ovat hyรถdyllisiรค?

Sulkemiset ovat itsenรคisiรค koodilohkoja joita voidaan vรคlittรครค eteenpรคin kuten arvoja ja kรคyttรครค takaisinkutsujen kรคsittelijรถinรค, tรคydennysten kรคsittelijรถinรค tai mukautettuina operaatiologiikoina. Ne ovat samankaltaisia โ€‹โ€‹kuin muiden kielten lambda-funktiot tai anonyymit funktiot.

Esimerkiksi:

let sumClosure = { (a: Int, b: Int) -> Int in
    return a + b
}
print(sumClosure(5, 7)) // 12

Sulkemiset tallentavat arvoja ympรคrรถivรคstรค kontekstistaan, mikรค mahdollistaa tehokkaat asynkroniset ja toiminnalliset ohjelmointimallit.


9) Selitรค geneeriset lรครคkkeet Swift ja niiden merkitys.

Geneeristen tyyppien avulla voit kirjoittaa joustavia, uudelleenkรคytettรคviรค funktioita ja tyyppejรค, jotka toimii minkรค tahansa tyyppisen kanssa sรคilyttรคen samalla tyyppiturvallisuuden. Niitรค kรคytetรครคn laajalti Swift vakiokirjasto (kuten Array, Dictionary, Jne.).

Esimerkiksi:

func swapValues<T>(_ a: inout T, _ b: inout T) {
    let temp = a
    a = b
    b = temp
}

Geneeriset koodit parantavat koodin uudelleenkรคyttรถรค ja vรคhentรคvรคt pรครคllekkรคisyyksiรค, jolloin voit kirjoittaa tehokkaita vatsasuorituksiatracturvallisesti.


10) Mitรค eroa on map-, filter- ja reduce-toimilla? Swift?

Nรคmรค toiminnot ovat osa Swift'S funktionaalisen ohjelmoinnin apuohjelmat kokoelmista:

  • kartta: Muuntaa jokaisen elementin.
  • suodatin: Valitsee elementit, jotka tรคyttรคvรคt ehdon.
  • vรคhentรครค: Yhdistรครค kaikki elementit yhdeksi arvoksi.

Esimerkiksi:

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

Nรคmรค tyรถkalut mahdollistavat ilmaisuvoimaisen ja ytimekkรครคn tiedonkรคsittelyn Swift kokoelmia.


11) Miten tyypin pรครคttely toimii Swift, ja mitkรค ovat sen hyรถdyt?

Kirjoita pรครคttely sisรครคn Swift on kรครคntรคjรคn ominaisuus, joka mรครคrittรครค automaattisesti muuttujan tai vakion tietotyypin sille annetun arvon perusteella. Tรคmรค antaa kehittรคjille mahdollisuuden kirjoittaa siistimpรครค ja luettavampaa koodia ilman, ettรค tyyppejรค tarvitsee erikseen mรครคrittรครค. Swiftn kรครคntรคjรค analysoi mรครคritetyn lausekkeen ja pรครคttelee sopivimman tyypin kรครคnnรถsaikana varmistaen tyyppiturvallisuuden ja vรคhentรคen samalla yksityiskohtaisuutta.

Tyyppipรครคttelyn ensisijainen hyรถty on kehittรคjรคn tuottavuuden paraneminen ja mallikoodin vรคhentรคminen. Se myรถs minimoi redundanssin, mikรค tekee Swift koodi on ilmaisuvoimaisempaa ja lรคhempรคnรค luonnollista kieltรค. Vaikka se on implisiittinen, tyypin pรครคttely ei vaaranna turvallisuutta, koska Swift on edelleen staattisesti tyypitetty kieli.

Esimerkiksi:

let count = 10        // Inferred as Int
let message = "Hi"    // Inferred as String
let price = 19.99     // Inferred as Double

Tyyppipรครคttely toimii saumattomasti geneeristen tyyppien, sulkeumien ja kokoelmien kanssa, mikรค mahdollistaa Swift sรคilyttรครคkseen selkeyden myรถs monimutkaisissa ilmaisuissa.


12) Mitรค ovat protokollat Swift, ja miten ne eroavat muiden kielten kรคyttรถliittymistรค?

Protokollat โ€‹โ€‹โ€‹โ€‹kohteessa Swift define metodien, ominaisuuksien ja vaatimusten suunnitelma jotka konformisten tyyppien on toteutettava. Ne ovat keskeisiรค Protokollakeskeinen ohjelmointi (POP), paradigma, jota voimakkaasti kannustetaan SwiftToisin kuin joidenkin kielten perinteiset kรคyttรถliittymรคt, Swift protokollat โ€‹โ€‹voivat tarjota oletustoteutukset protokollalaajennusten kautta.

Protokollia voidaan omaksua luokittain, rakentein ja luetteloin, mikรค tekee niistรค joustavampia kuin periytymiseen perustuvat absoluuttiset protokollat.tracNe tukevat myรถs useita konformansseja, toisin kuin luokkien yksittรคisperintรค.

Esimerkiksi:

protocol Drivable {
    var speed: Int { get }
    func drive()
}

extension Drivable {
    func drive() {
        print("Driving at speed \(speed)")
    }
}

Tรคmรค lรคhestymistapa edistรครค lรถyhรครค kytkentรครค, testattavuutta ja uudelleenkรคytettรคvรครค logiikkaa toisiinsa liittymรคttรถmien tyyppien vรคlillรค, mikรค tekee protokollista tehokkaampia kuin klassiset rajapinnat.


13) Selitรค structin ja classin vรคlinen ero Swift esimerkkien avulla.

Ero struct ja class in Swift pรครคasiassa piilee arvosemantiikka vs. viitesemantiikkaRakenteet ovat arvotyyppejรค, mikรค tarkoittaa, ettรค ne kopioidaan, kun ne osoitetaan tai niitรค vรคlitetรครคn eteenpรคin. Luokat ovat viittaustyyppejรค, mikรค tarkoittaa, ettรค useat viittaukset voivat osoittaa samaan instanssiin.

Aspect struct luokka
Tyyppi Arvon tyyppi Viitetyyppi
Muisti kopioitu Yhteinen
Perintรถ Ei tuettu Tuetut
ARC Ei kรคytetty Kรคytetty
Muuttuvuus vaatii mutating Ei tarvita

Esimerkiksi:

struct User {
    var name: String
}

var user1 = User(name: "Alice")
var user2 = user1
user2.name = "Bob"

Tรครคllรค user1 pysyy muuttumattomana. Tรคmรค ennustettavuus tekee rakenteista ihanteellisia malleille ja datasรคiliรถille.


14) Mikรค on iOS-sovelluksen elinkaari, joka on kirjoitettu kielellรค? Swift?

iOS-sovelluksen elinkaari mรครคrittelee sovelluksen eri tilat kรคynnistyksestรค lopettamiseen. Tรคmรคn elinkaaren ymmรคrtรคminen on ratkaisevan tรคrkeรครค resurssien hallinnassa, taustatehtรคvien kรคsittelyssรค ja jรคrjestelmรคtapahtumiin reagoimisessa.

Keskeisiรค elinkaaren vaiheita ovat:

  • Sovelluksen kรคynnistys
  • Aktiivinen tila
  • Taustatila
  • Keskeytetty tila
  • Lopetettu tila

Swift sovellukset kรคsittelevรคt nรคitรค siirtymiรค pรครคasiassa AppDelegate ja Kohtausedustaja menetelmรคt. Esimerkiksi application(_:didFinishLaunchingWithOptions:) kรคytetรครคn alkuasennukseen, kun taas sceneDidEnterBackground(_:) kรคytetรครคn jaettujen resurssien vapauttamiseen.

Esimerkki kรคyttรถtapauksesta: Kun kรคyttรคjรค saa puhelun, sovellus siirtyy taustalle. Kehittรคjien on tallennettava kรคyttรคjรคtiedot ja keskeytettรคvรค kรคynnissรค olevat tehtรคvรคt varmistaakseen sujuvan kรคyttรถkokemuksen sovelluksen jatkuessa.


15) Mitรค kiinteistรถjen tarkkailijat ovat? Swift, ja milloin niitรค tulisi kรคyttรครค?

Kiinteistรถtarkkailijat Swift antavat kehittรคjille mahdollisuuden seurata ja reagoida kiinteistรถn arvon muutoksiin. Ne toteutetaan kรคyttรคmรคllรค willSet ja didSet, jotka suoritetaan ennen ominaisuuden muutosta ja sen jรคlkeen.

Ominaisuustarkkailijat ovat hyรถdyllisiรค sivuvaikutusten kรคynnistรคmisessรค, kuten kรคyttรถliittymรคn pรคivittรคmisessรค, syรถtteen validoinnissa tai tietojen synkronoinnissa arvojen muuttuessa.

Esimerkiksi:

var score: Int = 0 {
    willSet {
        print("Score will change to \(newValue)")
    }
    didSet {
        print("Score changed from \(oldValue)")
    }
}

Observerit eivรคt toimi alustuksen aikana, mikรค estรครค odottamattoman toiminnan objektin luontivaiheessa. Ne sopivat parhaiten yksinkertaiseen valvontalogiikkaan raskaiden laskelmien sijaan.


16) Miten virheiden kรคsittely toimii? Swift?

Swift kรคyttรครค strukturoitua virheenkรคsittelymallia, joka perustuu heitto-, kiinniotto- ja levittรคmisvirheetVirheiden on oltava standardin mukaisia. Error protokollaa ja niitรค kรคsitellรครคn kรคyttรคmรคllรค do-try-catch lohkot.

Keskeisiรค komponentteja ovat:

  • throws avainsana funktioille
  • try, try?ja try!
  • Mukautetut virheluettelot

Esimerkiksi:

enum LoginError: Error {
    case invalidCredentials
}

func login(user: String) throws {
    throw LoginError.invalidCredentials
}

Tรคmรค lรคhestymistapa varmistaa eksplisiittisen virheenkรคsittelyn ja parantaa luotettavuutta estรคmรคllรค hiljaiset virheet, mikรค tekee Swift sovellukset ovat vakaampia ja helpommin yllรคpidettรคviรค.


17) Mitรค riippuvuusinjektio tarkoittaa? Swift, ja miksi se on tรคrkeรครค?

Riippuvuuksien injektointi (DI) on suunnittelumalli, jossa objekti saa riippuvuutensa ulkoisesta lรคhteestรค sen sijaan, ettรค se loisi ne sisรคisesti. SwiftDI parantaa modulaarisuutta, testattavuutta ja koodin joustavuutta.

Riippuvuusinjektiotyyppejรค ovat:

  • Rakentajan injektio
  • Kiinteistรถinjektio
  • Menetelmรคn injektio

Esimerkiksi:

class NetworkService { }

class ViewModel {
    let service: NetworkService
    init(service: NetworkService) {
        self.service = service
    }
}

Riippuvuuksien lisรครคmisen avulla kehittรคjรคt voivat helposti vaihtaa toteutuksia, kuten mallipalveluita, testauksen aikana muuttamatta ydinlogiikkaa. DI:tรค kรคytetรครคn laajalti skaalautuvissa Swift sovelluksissa.


18) Selitรค sulkimien kรคytรถn edut ja haitat Swift.

Sulkemiset ovat tehokkaita tyรถkaluja Swift, mutta niillรค on sekรค etuja ettรค haittoja.

edut Haitat
Ytimekรคs syntaksi Voi heikentรครค luettavuutta
Mahdollistaa asynkroniset takaisinkutsut Sรคilytysjaksojen riski
Tallentaa kontekstin Virheenkorjauksen monimutkaisuus
Toiminnallinen ohjelmointi Liikakรคyttรถ voi hรคiritรค virtausta

Sulkemisfunktioita kรคytetรครคn yleisesti tรคydennyskรคsittelijรถissรค, animaatioissa ja funktionaalisissa muunnoksissa. Vรครคrinkรคyttรถ, erityisesti vahvojen viittausten sieppausten kanssa, voi kuitenkin johtaa muistivuotoihin. [weak self] or [unowned self] lieventรครค tรคtรค riskiรค.

Sulkemismuotoja tulisi kรคyttรครค harkiten ilmaisuvoimaisuuden ja yllรคpidettรคvyyden tasapainottamiseksi.


19) Mitรค eroa on heikkojen ja omistamattomien viittausten vรคlillรค? Swift?

molemmat weak ja unowned viitteitรค kรคytetรครคn estรคmรครคn sรคilytysjaksot ARC:n alaisuudessa. Keskeinen ero on siinรค, miten ne kรคsittelevรคt deallocationin.

Aspect heikko omistamaton
Suosittelijan tunnus Kyllรค Ei
Aseta nollaksi Automaattisesti Ei
Turvallisuus turvallisempi Vaarallinen vรครคrin kรคytettynรค
Kรคytรค tapausta Edustajat Taattu kรคyttรถikรค

Esimerkiksi:

weak var delegate: SomeDelegate?

weak on suositeltava, kun viitattu objekti voi muuttua nil-arvoksi. unowned tulisi kรคyttรครค vain silloin, kun elinkaari on taattu, kuten vanhemman ja lapsen suhteissa.


20) Miten samanaikaisuus toimii Swift Kรคytetรครคnkรถ GCD:tรค ja async/await-toimintoa?

Swift tukee samanaikaisuutta Grand Central Dispatch (GCD) ja uudempi async / salahankkeensa malli. GCD kรคyttรครค jonoja taustatehtรคvien hallintaan, kun taas async/await tarjoaa luettavamman ja jรคsennellymmรคn samanaikaisuuslรคhestymistavan.

Esimerkki (asynkroninen/odota):

func fetchData() async throws -> String {
    return "Data loaded"
}

Async/await poistaa takaisinkutsujen sisรคkkรคisyyden, parantaa luettavuutta ja vรคhentรครค virhealtista koodia. GCD on edelleen hyรถdyllinen matalan tason tehtรคvienhallinnassa, mutta moderni Swift kehitys suosii yhรค enemmรคn strukturoitua samanaikaisuutta.


21) Mitรค ovat kรคyttรถoikeustasot Swift, ja miksi ne ovat tรคrkeitรค?

Pรครคsyoikeuksien hallinta Swift rajoittaa sitรค, miten koodikokonaisuuksiin, kuten luokkiin, metodeihin, ominaisuuksiin ja muuttujiin, voidaan pรครคstรค kรคsiksi ohjelman eri osista. Se on kriittinen ominaisuus turvallisten, yllรคpidettรคvien ja modulaaristen sovellusten rakentamisessa. Swift tarjoaa viisi kรคyttรถoikeustasoa jotka mรครคrittelevรคt nรคkyvyyden laajuuden.

Kรคyttรถoikeustaso Laajuus
open Esteetรถn ja alikuokiteltava ulkopuolinen moduuli
public Esteetรถn ulkomoduuli
internal Oletusarvo, kรคytettรคvissรค moduulin sisรคllรค
fileprivate Kรคytettรคvissรค samassa tiedostossa
private Saatavilla saman ilmoituksen sisรคllรค

Pรครคsynhallinta estรครค sisรคisen logiikan tahattoman kรคytรถn ja valvoo arkkitehtuurirajoja. Esimerkiksi apumetodien merkitseminen private varmistaa, etteivรคt ulkoiset kutsujat kรคytรค niitรค vรครคrin. Tรคstรค tulee erityisen tรคrkeรครค suurissa koodikannoissa ja kehyksissรค.


22) Selitรค avoimen ja julkisen saatavuuden muokkaajien ero Swift.

Vaikka open ja public Vaikka ne nรคyttรคvรคt samankaltaisilta, ne eroavat merkittรคvรคsti toisistaan โ€‹โ€‹โ€‹โ€‹aliluokittelun ja ohituskรคyttรคytymisen suhteen. Molemmat sallivat pรครคsyn mรครคrittelevรคn moduulin ulkopuolelle, mutta vain open sallii periytymisen ja metodien ohittamisen moduulin ulkopuolella.

Ominaisuus avata julkinen
Esteetรถn ulkomoduuli Kyllรค Kyllรค
Aliluokiteltava ulkopuolinen moduuli Kyllรค Ei
Ohitettava ulkomoduuli Kyllรค Ei

Esimerkki kรคyttรถtapauksesta: Kehyskehittรคjรคt kรคyttรคvรคt public kun he haluavat paljastaa toiminnallisuuden, mutta estรครค mukauttamisen. open kรคytetรครคn, kun tarkoituksena on laajennettavuus, kuten kรคyttรถliittymรคkehyksissรค, jotka mahdollistavat alaluokkien mukauttamisen.

Tรคmรค erottelu mahdollistaa Swift tasapainottaa turvallisuus ja laajennettavuus API-suunnittelussa.


23) Mitรค on laiska alustus? Swift, ja milloin sitรค tulisi kรคyttรครค?

Laiska alustus viivรคstyttรครค ominaisuuden luomista, kunnes sitรค kรคytetรครคn ensimmรคisen kerran. Swift, tรคmรค saavutetaan kรคyttรคmรคllรค lazy avainsana ja sitรค kรคytetรครคn yleisesti suorituskyvyn parantamiseen ja tarpeettoman muistin kรคytรถn vรคhentรคmiseen.

Esimerkiksi:

class DataManager {
    lazy var dataSource = loadData()
    func loadData() -> [String] {
        return ["A", "B", "C"]
    }
}

Laiskat ominaisuudet ovat erityisen hyรถdyllisiรค, kun alustus on kallista, kuten tiedostojen lataaminen, verkkopyynnรถt tai tietokantayhteydet. Ne on aina ilmoitettava muuttujina (var), koska niiden arvo asetetaan alustuksen jรคlkeen.

Laiska alustus parantaa kรคynnistyksen suorituskykyรค ja resurssien tehokkuutta, kun sitรค kรคytetรครคn oikein.


24) Mitรค ovat laajennukset Swift, ja mitรค ongelmia ne ratkaisevat?

Laajennukset antavat kehittรคjille mahdollisuuden lisรคtรค uusia toimintoja olemassa oleviin tyyppeihin muuttamatta niiden alkuperรคistรค toteutusta. Swift Laajennukset voivat lisรคtรค metodeja, laskettuja ominaisuuksia, protokollan vaatimustenmukaisuutta ja sisรคkkรคisiรค tyyppejรค.

Esimerkiksi:

extension Int {
    func squared() -> Int {
        return self * self
    }
}

Laajennukset edistรคvรคt koodin selkeรคmpรครค organisointia ryhmittรคinping liittyvรครค toiminnallisuutta. Ne ovat erityisen hyรถdyllisiรค, kun tyyppejรค mukautetaan protokolliin tai lisรคtรครคn apuohjelmametodeja. Toisin kuin aliluokat, laajennukset eivรคt tue tallennettuja ominaisuuksia, mikรค yllรคpitรครค muistin turvallisuutta.

Laajennukset auttavat pitรคmรครคn koodin modulaarisena, luettavana ja yllรคpidettรคvรคnรค, erityisesti suurissa projekteissa.


25) Selitรค staattisten ja luokkametodien vรคlinen ero Swift.

molemmat static ja class avainsanat mรครคrittelevรคt tyyppitason metodeja, mutta niiden toiminta eroaa periytymisskenaarioissa.

avainsana Voidaan ohittaa Kรคyttรถ
staattinen Ei Kiinteรค toteutus
luokka Kyllรค Suunniteltu alaluokittelua varten

Esimerkiksi:

class Vehicle {
    class func type() -> String {
        return "Vehicle"
    }
}

Kรคyttรครค static kun kรคyttรคytymisen tulisi pysyรค muuttumattomana eri alaluokkien vรคlillรค. Kรคytรค class kun polymorfismia vaaditaan. Tรคmรค ero on tรคrkeรค kehysten ja API-suunnittelussa, joissa laajennettavuuspรครคtรถksillรค on merkitystรค.


26) Mitรค ovat korkeamman asteen funktiot SwiftVastaa esimerkein.

Korkeamman asteen funktiot ovat funktioita, jotka joko hyvรคksyvรคt muita funktioita parametreina tai palauttavat funktioita tuloksena. Swift tukee tรคtรค konseptia voimakkaasti sulkemis- ja kerรคysmenetelmien kautta.

Yleisiรค korkeamman asteen funktioita ovat:

  • map
  • filter
  • reduce
  • compactMap
  • flatMap

Esimerkiksi:

let values = [1, 2, 3, 4]
let doubled = values.map { $0 * 2 }

Korkeamman asteen funktiot parantavat koodin ilmaisuvoimaisuutta ja vรคhentรคvรคt imperatiivista malliohjelmointia. Niitรค kรคytetรครคn laajalti funktionaaliohjelmoinnissa, ja ne ovat olennaisia โ€‹โ€‹selkeiden ja deklaratiivisten funktioiden kirjoittamisessa. Swift koodi.


27) Mikรค on sรคilytyssykli ja miten se voidaan estรครค Swift?

Sรคilytyssykli tapahtuu, kun kahdella tai useammalla luokkainstanssilla on vahvoja viittauksia toisiinsa, mikรค estรครค ARC:tรค vapauttamasta niitรค. Tรคmรค johtaa muistivuotoihin.

Yleinen skenaario:

Sulkemisten tallentaminen self vahvasti luokkien sisรคllรค.

Ehkรคisytekniikat:

  • Kรคyttรครค weak viittaukset
  • Kรคyttรครค unowned viittaukset
  • Kaappaa listoja sulkemisalueilta

Esimerkiksi:

someClosure = { [weak self] in
    self?.doSomething()
}

Sรคilytyssyklien ymmรคrtรคminen on olennaista muistitehokkaiden iOS-sovellusten rakentamisessa, erityisesti tyรถskenneltรคessรค sulkemisten ja delegoitujen kanssa.


28) Selitรค synkronisen ja asynkronisen koodin ero Swift.

SyncAsynkroninen koodi estรครค suorituksen, kunnes tehtรคvรค on valmis, kun taas asynkroninen koodi sallii suorituksen jatkua tehtรคvรคn suorittamisen taustalla.

Aspect Synckrooninen asynkroninen
Teloitus Esto Estoton
Suorituskyky Hitaampi kรคyttรถliittymรค Responsiivinen kรคyttรถliittymรค
Kรคytรค tapausta Yksinkertaiset tehtรคvรคt Verkkopuhelut

Swift kรคsittelee asynkronista ohjelmointia kรคyttรคmรคllรค GCD, tรคydennyskรคsittelijรคtja async / salahankkeensaAsynkroninen koodi on kriittisen tรคrkeรครค sujuvan kรคyttรถkokemuksen yllรคpitรคmiseksi tosielรคmรคn sovelluksissa.


29) Mikรค on koodattavaa? Swift, ja miksi se on hyรถdyllinen?

Codable on protokolla, joka mahdollistaa datan helpon koodauksen ja dekoodauksen laitteiden vรคlillรค. Swift objektit ja ulkoiset esitykset, kuten JSON tai ominaisuusluettelot. Se yhdistรครค Encodable ja Decodable.

Esimerkiksi:

struct User: Codable {
    let id: Int
    let name: String
}

Codable vรคhentรครค vakiomuotoista koodia ja parantaa luotettavuutta API-rajapintojen kรคsittelyssรค. Se varmistaa tyyppiturvallisuuden ja integroituu saumattomasti Swiftn standardikirjasto, mikรค tekee siitรค ensisijaisen ratkaisun datan serialisointiin.


30) Mitkรค ovat keskeiset erot Array-, Set- ja Dictionary-kommenttien vรคlillรค? Swift?

Swift tarjoaa kolme ensisijaista kokoelmatyyppiรค, joista jokainen on optimoitu eri kรคyttรถtapauksiin.

Kokoelma Jรคrjestetty Ainutlaatuiset arvot Avaimiin perustuva
Ryhmรค Kyllรค Ei Ei
Asettaa Ei Kyllรค Ei
Sanakirja Ei Avaimet ainutlaatuiset Kyllรค

Oikean kokoelman valitseminen parantaa suorituskykyรค ja selkeyttรค. Taulukot sopivat parhaiten jรคrjestettyyn dataan, joukot ainutlaatuisuuteen ja sanakirjat nopeisiin avainpohjaisiin hakuihin.


31) Mitรค on protokollapohjainen ohjelmointi? Swift, ja miksi sitรค suositaan perintรถรถn verrattuna?

Protokollakeskeinen ohjelmointi (POP) on keskeinen suunnittelufilosofia Swift joka korostaa kรคyttรคytymisen mรครคrittelyรค protokollien avulla sen sijaan, ettรค luottaisi vahvasti luokkaperimiseen. POP:ssa protokollat โ€‹โ€‹mรครคrittelevรคt, mitรค tyyppi voi tehdรค, ja protokollalaajennukset tarjoavat oletusarvoisia toteutuksia. Tรคmรค lรคhestymistapa vรคlttรครค monia syviin periytymishierarkioihin liittyviรค ongelmia, kuten tiukan kytkennรคn ja hauraat perusluokat.

POP toimii rakenteiden, luetteloiden ja luokkien kanssa, mikรค tekee siitรค joustavamman kuin oliopohjainen periytyminen. Se myรถs kannustaa sommitteluun periytymisen sijaan, mikรค parantaa testattavuutta ja skaalautuvuutta.

Esimerkiksi: Swiftn vakiokirjastotyypit, kuten Array ja Dictionary luottaa vahvasti protokolliin, kuten Sequence ja Collection, joka osoittaa, kuinka POP mahdollistaa uudelleenkรคytettรคvรคn ja yhdenmukaisen toiminnan toisiinsa liittymรคttรถmien tyyppien vรคlillรค.


32) Selitรค iOS:n delegointi- ja ilmoitusmallien ero kรคyttรคmรคllรค Swift.

Delegointi ja ilmoitus ovat kaksi yleistรค viestintรคmallia iOS-kehityksessรค. Delegointi luo kahdenkeskinen suhde, jossa yksi objekti kommunikoi takaisin toiseen protokollan kautta. Ilmoitukset seuraavat yksi moniin malli, jossa useat havainnoijat voivat kuunnella tapahtumia.

Aspect valtuuskunta Ilmoitus
Yhteys Yksi yhteen Yksi moniin
Kytkin Tiukka Lรถysรค
Suorituskyky Nopeampi Hieman hitaammin
Kรคytรค tapausta Kรคyttรคjรคn toimet Globaalit tapahtumat

Delegointi sopii erinomaisesti kรคyttรคjien vuorovaikutuksen kรคsittelyyn, kun taas ilmoitukset sopivat paremmin koko jรคrjestelmรคn laajuisten muutosten, kuten nรคppรคimistรถn ulkonรครถn, lรคhettรคmiseen.


33) Mitรค eroa on kehyksellรค ja rajoilla? Swift Kรคyttรถliittymรคn kehitys?

frame ja bounds mรครคrittรครค nรคkymรคn koon ja sijainnin, mutta eri koordinaatistossa. frame on suhteessa superview-nรคkymรครคn, kun taas bounds on suhteessa itse nรคkemykseen.

Omaisuus runko rajat
Koordinaattijรคrjestelmรค Ylรคnรคkymรค Oma nรคkymรค
Mukana oleva sijainti Kyllรค Ei
Muunnosten vaikutuksen alaisena Kyllรค Ei

Tรคmรคn eron ymmรคrtรคminen on kriittistรค animaatioita, muunnoksia tai mukautettuja piirtotoimintoja suoritettaessa.


34) Miten automaattinen asettelu toimii? Swift, ja mitรค ovat rajoitukset?

Automaattinen asettelu on asettelujรคrjestelmรค, joka laskee dynaamisesti nรคkymien koot ja sijainnit rajoitusten perusteella. Rajoitukset mรครคrittelevรคt kรคyttรถliittymรคelementtien vรคlisiรค suhteita, kuten vรคlistyksen, tasauksen ja kokosuhteet.

Automaattinen asettelu mukauttaa asettelut eri nรคyttรถkokoihin, suuntiin ja esteettรถmyysasetuksiin. Rajoituksia voidaan mรครคrittรครค Interface Builderilla, ankkureilla tai ohjelmallisesti.

Esimerkiksi:

view.leadingAnchor.constraint(equalTo: parent.leadingAnchor).isActive = true

Automaattinen asettelu varmistaa responsiivisen ja mukautuvan kรคyttรถliittymรคsuunnittelun, mikรค on olennaista nykyaikaisille iOS-sovelluksille.


35) Mitรค ovat geneeristen lรครคkkeiden rajoitukset? SwiftVastaa esimerkein.

Yleiset rajoitteet rajoittavat geneeristen tyyppien kanssa kรคytettรคviรค tyyppejรค, mikรค parantaa tyyppiturvallisuutta. Rajoitukset voivat vaatia tyypin noudattavan protokollaa tai periytyvรคn tietystรค luokasta.

Esimerkiksi:

func printValues<T: Comparable>(_ a: T, _ b: T) {
    print(max(a, b))
}

Yleiset rajoitteet ovat vรคlttรคmรคttรถmiรค uudelleenkรคytettรคvien mutta kontrolloitujen abs-arvojen kirjoittamiseksitracNe antavat kehittรคjille mahdollisuuden valvoa toimintavaatimuksia sรคilyttรคen samalla joustavuuden.


36) Selitรค ero tekstin, vahvan ja heikon sisรคllรถn vรคlillรค Swift muistinhallinta.

Nรคmรค avainsanat mรครคrittรคvรคt, miten viitteitรค hallitaan ARC:ssรค.

Viite Sรคilytรค mรครคrรค Kรคytรค asiaa
vahva Lisรคykset Oletusomistus
heikko Ei lisรคystรค Vรคltรค sรคilytysjaksoja
kopio Luo uusia Arvon eristรคminen

copy kรคytetรครคn yleisesti kokoelmien tai merkkijonojen kanssa muuttumattomuuden varmistamiseksi, kun taas weak on olennainen delegointimalleille.


37) Mitรค on method swizzling? Swiftja milloin sitรค tulisi vรคlttรครค?

Metodin swizzling on ajonaikainen tekniikka, joka muuttaa olemassa olevan metodin toteutusta. Vaikka se on tehokas, se on vaarallinen ja sitรค ei suositella. Swift koska se ohittaa kรครคnnรถsaikaisen turvallisuuden.

Swizzling voi johtaa arvaamattomaan toimintaan, katkaista jรคrjestelmรคpรคivitykset ja vaikeuttaa virheenkorjausta. Sitรค tulisi kรคyttรครค vain kontrolloiduissa tilanteissa, kuten analytiikassa tai virheenkorjauskehyksissรค.

Swiftpainotus turvallisuuteen ja staattiseen kiireeseen tekee kulauksesta viimeisenรค keinona.


38) Miten Swift hoitaa sรคikeiden turvallisuuden ja datakilpailut?

Swift kรคsittelee samanaikaisuutta kรคyttรคmรคllรค GCD:tรค, lukkoja ja modernia Swift Samanaikaisuuden malliToimijat ovat keskeinen ominaisuus, joka tarjoaa datan eristรคmisen varmistamalla, ettรค vain yksi tehtรคvรค voi kรคyttรครค muuttuvaa tilaan kerrallaan.

Esimerkiksi:

actor Counter {
    var value = 0
    func increment() {
        value += 1
    }
}

Toimijat yksinkertaistavat sรคikeiden turvallisuutta ja vรคhentรคvรคt datakilpailujen todennรคkรถisyyttรค, mikรค tekee samanaikaisesta ohjelmoinnista turvallisempaa ja helpommin lรคhestyttรคvรครค.


39) Mitรค eroa on @esca:lla?ping ja ei-escaping sulkemiset Swift?

Sulkemiset eivรคt ole pakopaikkojaping oletusarvoisesti, eli ne suoritetaan funktion laajuusalueella. Escaping sulkeutumiset kestรคvรคt funktiokutsun jรคlkeen ja ne on merkittรคvรค erikseen @escaping.

Aspect Ei-Escaping ESCAping
Elinikรคinen Lyhyt Pitkรคt
Suorituskyky Nopeampi Hieman ylรคpuolella
Kรคytรค tapausta Vรคlitรถn logiikka Asynkroniset takaisinkutsut

Escan ymmรคrtรคminenping Sulkemiset ovat kriittisiรค muistin hallinnalle ja sรคilytyssyklien vรคlttรคmiselle.


40) Mitkรค ovat kรคytรถn edut ja haitat SwiftKรคyttรถliittymรค verrattuna UIKitiin?

SwiftKรคyttรถliittymรค on Applen esittelemรค deklaratiivinen kรคyttรถliittymรคkehys, kun taas UIKit on vรคlttรคmรคtรถn.

SwiftKรคyttรถliittymรคn edut SwiftKรคyttรถliittymรคn haitat
Less kattilalevy Rajoitettu taaksepรคin tuki
Live-esikatselut Less kypsรค
Deklaratiivinen syntaksi Vรคhemmรคn mukautuskoukkuja

SwiftKรคyttรถliittymรค nopeuttaa kehitystรค, mutta UIKit on edelleen vรคlttรคmรคtรถn monimutkaisille tai vanhoille sovelluksille. Monet tuotantosovellukset kรคyttรคvรคt hybridilรคhestymistapaa.


๐Ÿ” Huippu Swift Haastattelukysymykset tosielรคmรคn skenaarioilla ja strategisilla vastauksilla

1) Mitkรค ovat tรคrkeimmรคt ominaisuudet Swift mikรค erottaa sen Objective-C:stรค?

Ehdokkaalta odotetaan: Haastattelija haluaa arvioida, ymmรคrrรคtkรถ asian Swift perusteet ja miksi sitรค suositaan nykyaikaisessa iOS-kehityksessรค.

Esimerkki vastauksesta: Swift tarjoaa vahvan tyyppiturvallisuuden, valinnaisia โ€‹โ€‹ominaisuuksia null-viittausvirheiden estรคmiseksi, automaattisen muistinhallinnan ARC:n kautta ja parannetun luettavuuden puhtaalla syntaksilla. Se tarjoaa myรถs tehokkaita ominaisuuksia, kuten arvotyypit, protokollakeskeisen ohjelmoinnin ja kuvioiden yhteensovituksen, jotka tekevรคt sovelluksista turvallisempia ja helpompia yllรคpitรครค verrattuna Objective-C:hen.


2) Voitko selittรครค arvotyyppien ja viittaustyyppien vรคlisen eron? Swift?

Ehdokkaalta odotetaan: Haastattelija testaa ymmรคrrystรคsi muistinhallinnasta ja datan kรคyttรคytymisestรค Swift.

Esimerkki vastauksesta: Arvotyypit, kuten rakenteet ja luettelot, kopioidaan, kun ne osoitetaan tai vรคlitetรครคn, mikรค varmistaa datan eristรคytymisen. Viittaustyypit, kuten luokat, jakavat saman muistiviittauksen, mikรค tarkoittaa, ettรค muutokset yhdessรค paikassa vaikuttavat kaikkiin viittauksiin. Valinta niiden vรคlillรค riippuu siitรค, vaaditaanko jaettua muokattavaa tilaa.


3) Miten valinnaiset ominaisuudet toimivat Swift, ja miksi ne ovat tรคrkeitรค?

Ehdokkaalta odotetaan: Haastattelija haluaa tietรครค, miten kรคsittelet nil-arvoja turvallisesti ja vรคltรคt ajonaikaiset kaatumiset.

Esimerkki vastauksesta: Valinnaiset arvot edustavat arvon olemassaoloa tai puuttumista. Ne ovat tรคrkeitรค, koska ne pakottavat kehittรคjรคt kรคsittelemรครคn nollatapaukset eksplisiittisesti kรคyttรคmรคllรค valinnaista sidontaa, valinnaista ketjutusta tai suojauslausekkeita. Tรคmรค rakenne vรคhentรครค merkittรคvรคsti odottamattomia kaatumisia ja parantaa sovelluksen vakautta.


4) Kuvaile tilannetta, jossa kรคytit protokollapohjaista ohjelmointia Swift.

Ehdokkaalta odotetaan: Haastattelija haluaa nรคhdรค, miten haet edistyneitรค taitoja Swift konsepteja todellisissa projekteissa.

Esimerkki vastauksesta: Edellisessรค roolissani kรคytin protokollapohjaista ohjelmointia mรครคrittรครคkseni jaetun kรคyttรคytymisen useissa nรคkymรคmalleissa. Kรคyttรคmรคllรค protokollia oletustoteutuksilla vรคhensin koodin pรครคllekkรคisyyttรค ja paransin testattavuutta samalla kun pidinping lรถyhรคsti kytkettyjรค komponentteja.


5) Miten hallitset muistiasi tehokkaasti? Swift sovellukset?

Ehdokkaalta odotetaan: Haastattelija arvioi ymmรคrrystรคsi ARC:stรค ja suoritusperusteista.

Esimerkki vastauksesta: Edellisessรค tyรถssรคni hallitsin muistia kรคyttรคmรคllรค huolellisesti heikkoja ja omistamattomia viittauksia vรคlttรครคkseni sรคilytyssyklejรค, erityisesti sulkemisissa ja delegointimalleissa. Kรคytin myรถs Instruments-ohjelmistoa muistivuotojen tunnistamiseen ja varmistin, ettรค nรคkymรคohjaimet vapautettiin oikein.


6) Miten kรคsittelet asynkronisia toimintoja Swift?

Ehdokkaalta odotetaan: Haastattelija haluaa tietรครค, miten hallitset sovellusten samanaikaisuutta ja reagointikykyรค.

Esimerkki vastauksesta: Kรคsittelen asynkronisia toimintoja Grand Central Dispatchin ja Swift rinnakkaisominaisuudet, kuten async ja await. Nรคiden tyรถkalujen avulla voin pitรครค kรคyttรถliittymรคn responsiivisena samalla, kun suoritan taustatehtรคviรค, kuten verkkopuheluita tai tietojen kรคsittelyรค.


7) Kuvaile haastavaa bugia, jonka kohtasit Swift projekti ja miten ratkaisit sen.

Ehdokkaalta odotetaan: Haastattelija arvioi ongelmanratkaisutapaasi ja virheenkorjaustaitojasi.

Esimerkki vastauksesta: Edellisessรค tyรถpaikassani kohtasin kaatumisen, joka johtui pakotetusta purkamisestaping valinnainen verkkovastauksen aikana. Ratkaisin tรคmรคn ottamalla kรคyttรถรถn asianmukaisen valinnaisen sidonnan ja lisรครคmรคllรค puolustavia tarkistuksia, jotka poistivat kaatumisen ja paransivat virheiden kรคsittelyรค koko moduulissa.


8) Miten varmistat koodin laadun ja yllรคpidettรคvyyden? Swift hankkeita?

Ehdokkaalta odotetaan: Haastattelija haluaa tietoa kehitystyรถstรคsi ja tiimityรถskentelystรคsi.

Esimerkki vastauksesta: Varmistan koodin laadun noudattamalla Swift tyyliohjeita, modulaarisen koodin kirjoittamista ja mielekkรคiden nimeรคmiskรคytรคntรถjen kรคyttรถรค. Kรคytรคn myรถs koodikatselmuksia, yksikkรถtestejรค ja dokumentaatiota varmistaakseni, ettรค koodikanta pysyy yllรคpidettรคvรคnรค ja ymmรคrrettรคvรคnรค koko tiimille.


9) Miten kรคsittelisit tilannetta, jossa ominaisuus on toimitettava nopeasti, mutta vaatimukset ovat epรคselvรคt?

Ehdokkaalta odotetaan: Haastattelija haluaa arvioida viestintรค- ja pรครคtรถksentekotaitojasi paineen alla.

Esimerkki vastauksesta: Aloittaisin selventรคmรคllรค ydinvaatimukset sidosryhmien kanssa ja tunnistamalla vรคhimmรคistoiminnallisuuden. Sen jรคlkeen viestisin oletukset selkeรคsti, toteuttaisin ominaisuuden iteratiivisesti ja pysyisin joustavana palautteen huomioimisessa mรครคrรคaikaa noudattaen.


10) Mikรค motivoi sinua tyรถskentelemรครคn Swift ja iOS-kehitys?

Ehdokkaalta odotetaan: Haastattelija haluaa ymmรคrtรครค intohimosi ja pitkรคaikaisen kiinnostuksesi teknologiaa kohtaan.

Esimerkki vastauksesta: Edellisessรค roolissani minua motivoi Swiftn keskittyy turvallisuuteen, suorituskykyyn ja moderniin kielisuunnitteluun. Kรคyttรคjiin suoraan vaikuttavien sovellusten rakentaminen jatkuvasti kehittyvรคssรค ekosysteemissรค pitรครค minut sitoutuneena ja innokkaana kehittymรครคn kehittรคjรคnรค.

Tiivistรค tรคmรค viesti seuraavasti: