Top 40 Swift Pertanyaan dan Jawaban Wawancara (2026)

Swift Pertanyaan dan Jawaban Wawancara

Bersiap untuk a Swift Wawancara pengembang berarti mengantisipasi apa yang sebenarnya dinilai oleh pewawancara di luar sintaksis. Swift Pertanyaan-pertanyaan wawancara mengungkapkan kedalaman pemecahan masalah, penilaian pengkodean, dan pemahaman praktis dalam skenario nyata.

Peran-peran ini membuka jalur karier yang kuat seiring dengan meningkatnya adopsi iOS, memberikan penghargaan atas keahlian teknis, keahlian di bidang tertentu, dan pengalaman nyata di lingkungan produksi. Para profesional yang bekerja di bidang ini menerapkan analisis, mempertajam kedalaman keterampilan, berkolaborasi dengan tim, membantu manajer dan senior, serta dengan percaya diri menjawab pertanyaan umum dari pemula hingga tingkat berpengalaman di seluruh dunia saat ini.
Baca lebih banyakโ€ฆ

๐Ÿ‘‰ Unduhan PDF Gratis: Swift Pertanyaan & Jawaban Wawancara

Atasan Swift Pertanyaan dan Jawaban Wawancara

1) Apa itu Swift Dan apa yang membuatnya populer untuk pengembangan iOS?

Swift adalah bahasa pemrograman tingkat tinggi modern yang dikembangkan oleh Apple untuk membangun aplikasi di seluruh iOS, macOS, watchOS, dan tvOS. Ini menekankan keselamatan, kinerja, dan ekspresivitas, dengan fitur seperti jenis opsional, jenis inferensi, dan manajemen memori otomatis. SwiftSintaksnya ringkas namun ampuh, yang mengurangi kemungkinan kesalahan pemrograman umum seperti dereferensi pointer null dan ketidakcocokan tipe. Swift juga mendukung Pemrograman Berorientasi Protokol (POP) berdampingan dengan paradigma berorientasi objek tradisional, sehingga memungkinkan kode yang lebih modular dan dapat digunakan kembali.

Contoh: Swift'S tipe opsional Mengkapsulasi variabel yang mungkin berisi nilai atau tidak, mencegah kerusakan runtime yang tidak terduga karena referensi nil, yang sering menjadi sumber bug dalam bahasa pemrograman sebelumnya seperti Objective-C.


2) Bagaimana cara mendeklarasikan variabel dan konstanta di SwiftApa perbedaan antara var dan let?

Untuk mendeklarasikan variabel di Swift, kamu menggunakan varUntuk mendeklarasikan konstanta, Anda menggunakan let. Sebuah variabel (var) dapat mengubah nilainya setelah ditetapkan, sedangkan sebuah konstan (let) Tidak dapat diubah setelah diinisialisasi โ€” sehingga menghasilkan kode yang lebih aman dan mudah diprediksi.

Contoh:

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

Jika Anda mencoba menetapkan ulang nilai ke suatu let Jika konstan, kompiler akan menampilkan kesalahan. Perbedaan ini memberlakukan immutabilitas secara default jika memungkinkan, sehingga meningkatkan stabilitas program.


3) Apa itu Mata Kuliah Opsional dalam Swift dan mengapa hal itu penting?

Opsional dalam Swift adalah a Fitur bahasa yang menyatakan kemungkinan bahwa suatu variabel mungkin tidak memiliki nilai.Daripada secara implisit mengasumsikan bahwa suatu variabel selalu menyimpan data, Swift menggunakan ? sintaks untuk menunjukkan bahwa suatu variabel mungkin nil, yang membuat kode lebih aman dengan memaksa pengembang untuk secara eksplisit membuka atau menangani ketiadaan suatu nilai.

Contoh:

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

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

Optional membantu mendeteksi bug pada waktu kompilasi yang jika tidak akan muncul pada waktu eksekusi.


4) Apa perbedaan antara tipe nilai dan tipe referensi dalam Swift?

In Swift, jenis nilai (Seperti struct, enum, tuple) simpan salinan unik dari data, sedangkan jenis referensi (Seperti class) berbagi satu instance di berbagai referensi.

Fitur Tipe Nilai (struct, enum) Tipe Referensi (kelas)
Perilaku memori Disalin atas penugasan Referensi bersama
Gunakan kasing Model data, data ringan Objek, status bersama
Warisan Tidak didukung Didukung
Example struct Point { โ€ฆ } class Person { โ€ฆ }

Contoh:

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

Ini menunjukkan bagaimana perubahan pada salinan tidak memengaruhi aslinya untuk tipe nilai.


5) Apa itu Penghitungan Referensi Otomatis (Automatic Reference Counting/ARC)? Bagaimana cara kerjanya? Swift?

Penghitungan Referensi Otomatis (ARC) adalah Swift'S sistem manajemen memori yang secara otomatis mengelola alokasi dan dealokasi memori untuk instance kelas. Saat sebuah instance dibuat, ARC tracks berapa banyak referensi yang menunjuk ke instance tersebut. Ketika jumlah referensi turun menjadi nol, instance tersebut akan dibatalkan alokasinya.

Poin Kunci:

  • Referensi yang kuat meningkatkan jumlah referensi.
  • Referensi lemah atau tidak dimiliki Jangan menambah jumlahnya dan bantu mencegah siklus retensi, yang dapat menyebabkan kebocoran memori pada aplikasi iOS.

Contoh: Siklus retensi umum terjadi ketika dua objek memegang referensi kuat satu sama lain. Dengan menggunakan weak or unowned Kata kunci dapat memutus siklus ini.


6) Apa itu Optional Chaining?

Optional chaining adalah cara ringkas untuk menanyakan dan memanggil properti, metode, dan subscript pada sebuah optional yang mungkin saat ini sedang nilJika parameter opsional berisi nilai, panggilan berhasil; jika tidak, nil, seluruh rantai kembali nil tanpa mengalami kerusakan.

Contoh:

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

Teknik ini menghindari pembukaan paksa.ping (!), menghasilkan kode yang lebih aman dengan lebih sedikit kerusakan.


7) Apa perbedaan pernyataan guard dengan pernyataan if dalam Swift?

The guard Pernyataan ini digunakan untuk keluar lebih awal jika suatu kondisi tidak terpenuhi. Pernyataan ini harus keluar dari cakupan saat ini (dengan return, break, continue, atau throw) ketika kondisi tersebut gagal. Hal ini mendorong penanganan yang jelas terhadap keadaan yang tidak valid sejak awal.

Contoh:

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

Tidak seperti if pernyataan yang menyusun logika, guard Membantu meratakan kode dan meningkatkan keterbacaan.


8) Apa yang dimaksud dengan penutupan (closures) dalam SwiftApa kegunaannya?

Penutupan adalah blok kode mandiri yang dapat diteruskan seperti nilai dan digunakan sebagai penangan panggilan balik, penangan penyelesaian, atau logika operasi khusus. Ini mirip dengan lambda atau fungsi anonim dalam bahasa pemrograman lain.

Contoh:

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

Closure menangkap nilai dari konteks sekitarnya, memungkinkan pola pemrograman asinkron dan fungsional yang ampuh.


9) Jelaskan generik dalam Swift dan pentingnya hal tersebut.

Generik memungkinkan Anda untuk menulis fungsi dan tipe yang fleksibel dan dapat digunakan kembali. bekerja dengan segala jenis sambil tetap menjaga keamanan tipe data. Metode ini banyak digunakan dalam... Swift pustaka standar (seperti Array, Dictionary, Dll).

Contoh:

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

Generik meningkatkan penggunaan kembali kode dan mengurangi duplikasi, memungkinkan Anda untuk menulis abstraksi yang ampuh.tracdengan aman.


10) Apa perbedaan antara map, filter, dan reduce? Swift?

Fungsi-fungsi ini merupakan bagian dari Swift'S utilitas pemrograman fungsional pada koleksi:

  • peta: Mengubah setiap elemen.
  • filter: Memilih elemen yang memenuhi suatu kondisi.
  • mengurangi: Menggabungkan semua elemen menjadi satu nilai tunggal.

Contoh:

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

Alat-alat ini memungkinkan penanganan data yang ekspresif dan ringkas dalam Swift koleksi.


11) Bagaimana cara kerja inferensi tipe dalam SwiftLalu, apa saja manfaatnya?

Inferensi tipe dalam Swift adalah fitur kompiler yang secara otomatis menentukan tipe data suatu variabel atau konstanta berdasarkan nilai yang diberikan kepadanya. Hal ini memungkinkan pengembang untuk menulis kode yang lebih bersih dan mudah dibaca tanpa harus secara eksplisit menentukan tipe data dalam banyak situasi. SwiftCompiler menganalisis ekspresi yang ditugaskan dan menyimpulkan tipe yang paling tepat pada waktu kompilasi, memastikan keamanan tipe sekaligus mengurangi kerumitan.

Manfaat utama dari inferensi tipe adalah peningkatan produktivitas pengembang dan pengurangan kode berulang. Hal ini juga meminimalkan redundansi, sehingga membuat Swift Kode menjadi lebih ekspresif dan lebih dekat dengan bahasa alami. Meskipun implisit, inferensi tipe tidak membahayakan keamanan karena Swift tetap merupakan bahasa pemrograman bertipe statis.

Contoh:

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

Inferensi tipe bekerja dengan lancar dengan generik, penutupan (closure), dan koleksi, sehingga memungkinkan Swift untuk menjaga kejelasan bahkan dalam ungkapan yang kompleks.


12) Apa itu protokol dalam SwiftLalu, apa perbedaannya dengan antarmuka pada bahasa pemrograman lain?

Protokol dalam Swift mendefinisikan rancangan metode, properti, dan persyaratan Tipe yang sesuai harus mengimplementasikan hal tersebut. Hal ini sangat penting bagi Pemrograman Berorientasi Protokol (POP), sebuah paradigma yang sangat didukung oleh SwiftBerbeda dengan antarmuka tradisional pada beberapa bahasa, Swift protokol dapat menyediakan implementasi default melalui perluasan protokol.

Protokol dapat diadopsi oleh kelas, struct, dan enum, yang membuat protokol lebih fleksibel daripada pendekatan berbasis pewarisan.tracSelain itu, mereka juga mendukung berbagai konformitas, tidak seperti pewarisan tunggal pada kelas.

Contoh:

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

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

Pendekatan ini mendorong keterkaitan yang longgar, kemampuan pengujian, dan logika yang dapat digunakan kembali di berbagai tipe yang tidak terkait, sehingga menjadikan protokol lebih ampuh daripada antarmuka klasik.


13) Jelaskan perbedaan antara struct dan class dalam Swift dengan contoh.

Perbedaan antara struct ke class in Swift terutama terletak di semantik nilai versus semantik referensiStruktur adalah tipe nilai, artinya struktur tersebut disalin saat diberikan atau diteruskan. Kelas adalah tipe referensi, artinya beberapa referensi dapat menunjuk ke instance yang sama.

Aspek Struktur Kelas
Tipe Jenis nilai Tipe referensi
Memori Disalin bersama
Warisan Tidak didukung Didukung
ARC Tidak digunakan Bekas
Mutabilitas Membutuhkan mutating Tidak diperlukan

Contoh:

struct User {
    var name: String
}

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

Di sini, user1 tetap tidak berubah. Prediktabilitas ini membuat struct ideal untuk model dan wadah data.


14) Apa siklus hidup aplikasi iOS yang ditulis dalam Swift?

Siklus hidup aplikasi iOS mendefinisikan berbagai status yang dilalui aplikasi dari peluncuran hingga penghentian. Memahami siklus hidup ini sangat penting untuk mengelola sumber daya, menangani tugas latar belakang, dan menanggapi peristiwa sistem.

Tahapan-tahapan penting dalam siklus hidup meliputi:

  • Peluncuran aplikasi
  • Status aktif
  • Keadaan latar belakang
  • Keadaan ditangguhkan
  • Status diakhiri

Swift Aplikasi menangani transisi ini terutama melalui Delegasi Aplikasi ke Delegasi Adegan metode. Misalnya, application(_:didFinishLaunchingWithOptions:) digunakan untuk pengaturan awal, sedangkan sceneDidEnterBackground(_:) Digunakan untuk melepaskan sumber daya bersama.

Contoh Kasus Penggunaan: Saat pengguna menerima panggilan telepon, aplikasi akan beralih ke latar belakang. Pengembang harus menyimpan data pengguna dan menghentikan sementara tugas yang sedang berjalan untuk memastikan pengalaman yang lancar saat aplikasi kembali berjalan.


15) Apa itu pengamat properti dalam Swift, dan kapan sebaiknya digunakan?

Pengamat properti di Swift Memungkinkan pengembang untuk memantau dan menanggapi perubahan nilai properti. Implementasinya menggunakan... willSet ke didSet, yang dieksekusi sebelum dan sesudah perubahan properti.

Pengamat properti berguna untuk memicu efek samping seperti memperbarui UI, memvalidasi input, atau menyinkronkan data ketika nilai berubah.

Contoh:

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

Observer tidak berjalan selama inisialisasi, yang mencegah perilaku tak terduga pada saat pembuatan objek. Observer paling cocok untuk logika pemantauan sederhana daripada komputasi berat.


16) Bagaimana cara kerja penanganan kesalahan di Swift?

Swift menggunakan model penanganan kesalahan terstruktur berdasarkan melempar, menangkap, dan menyebarkan kesalahanKesalahan harus sesuai dengan Error protokol dan ditangani menggunakan do-try-catch blok.

Komponen utama meliputi:

  • throws kata kunci untuk fungsi
  • try, try?, dan try!
  • Enum kesalahan kustom

Contoh:

enum LoginError: Error {
    case invalidCredentials
}

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

Pendekatan ini menerapkan penanganan kesalahan secara eksplisit dan meningkatkan keandalan dengan mencegah kegagalan yang tidak terdeteksi, sehingga Swift aplikasi yang lebih tangguh dan mudah dipelihara.


17) Apa itu dependency injection dalam Swift, dan mengapa itu penting?

Dependency Injection (DI) adalah pola desain di mana sebuah objek menerima dependensinya dari sumber eksternal daripada membuatnya secara internal. SwiftDI meningkatkan modularitas, kemampuan pengujian, dan fleksibilitas kode.

Jenis-jenis injeksi ketergantungan meliputi:

  • Injeksi konstruktor
  • Injeksi properti
  • Injeksi metode

Contoh:

class NetworkService { }

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

Dengan menyuntikkan dependensi, pengembang dapat dengan mudah mengganti implementasi, seperti layanan tiruan (mock services) selama pengujian, tanpa mengubah logika inti. DI banyak digunakan dalam pengembangan yang skalabel. Swift aplikasi.


18) Jelaskan keuntungan dan kerugian penggunaan penutupan dalam Swift.

Penutupan adalah alat yang ampuh dalam SwiftNamun, hal tersebut memiliki manfaat dan juga kekurangan.

Kelebihan Kekurangan
Sintaksis yang ringkas Dapat mengurangi keterbacaan
Mengaktifkan callback asinkron Risiko siklus retensi
Menangkap konteks Kompleksitas debugging
Pemrograman fungsional Penggunaan berlebihan dapat mengganggu alur.

Closure umumnya digunakan untuk penanganan penyelesaian (completion handler), animasi, dan transformasi fungsional. Namun, penggunaan yang tidak tepat, terutama dengan pengambilan referensi yang kuat (strong reference capture), dapat menyebabkan kebocoran memori. Dengan menggunakan... [weak self] or [unowned self] mengurangi risiko ini.

Penutup harus digunakan dengan bijak untuk menyeimbangkan ekspresivitas dan kemudahan pemeliharaan.


19) Apa perbedaan antara referensi lemah dan referensi tak bertuan dalam Swift?

Kedua weak ke unowned Referensi digunakan untuk mencegah mempertahankan siklus di bawah ARC. Perbedaan utamanya terletak pada cara mereka menangani deallokasi.

Aspek lemah tidak dimiliki
Opsional Ya Tidak
Ditetapkan menjadi nol Secara otomatis Tidak
Safety/keselamatan Lebih aman Berisiko jika disalahgunakan
Gunakan kasing Delegasi Garansi seumur hidup

Contoh:

weak var delegate: SomeDelegate?

weak lebih disukai ketika objek yang dirujuk mungkin menjadi nil. unowned Sebaiknya hanya digunakan ketika siklus hidupnya terjamin, seperti hubungan orang tua-anak.


20) Bagaimana cara kerja konkurensi di Swift Menggunakan GCD dan async/await?

Swift mendukung konkurensi melalui Pengiriman Grand Central (GCD) dan yang lebih baru async/menunggu Model GCD menggunakan antrian untuk mengelola tugas latar belakang, sementara async/await menyediakan pendekatan konkurensi yang lebih mudah dibaca dan terstruktur.

Contoh (async/await):

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

Async/await menghilangkan penestingan callback, meningkatkan keterbacaan, dan mengurangi kode yang rawan kesalahan. GCD masih berguna untuk manajemen tugas tingkat rendah, tetapi metode modern Swift Pengembangan semakin mengutamakan konkurensi terstruktur.


21) Apa yang dimaksud dengan level kontrol akses di Swift, dan mengapa hal itu penting?

Kontrol akses di Swift Membatasi bagaimana entitas kode seperti kelas, metode, properti, dan variabel dapat diakses dari berbagai bagian program. Ini adalah fitur penting untuk membangun aplikasi yang aman, mudah dipelihara, dan modular. Swift menyediakan lima tingkat kontrol akses yang menentukan cakupan visibilitas.

Tingkat Akses Cakupan
open Dapat diakses dan dapat diwariskan di luar modul.
public Modul luar yang dapat diakses
internal Default, dapat diakses di dalam modul
fileprivate Dapat diakses dalam file yang sama
private Dapat diakses dalam deklarasi yang sama

Kontrol akses mencegah penggunaan logika internal yang tidak disengaja dan menegakkan batasan arsitektur. Misalnya, menandai metode pembantu sebagai private Hal ini memastikan agar fungsi-fungsi tersebut tidak disalahgunakan oleh pihak eksternal. Ini menjadi sangat penting terutama pada basis kode dan kerangka kerja yang besar.


22) Jelaskan perbedaan antara pengubah akses terbuka dan akses publik dalam Swift.

Meskipun open ke public Meskipun tampak serupa, keduanya berbeda secara signifikan ketika menyangkut pewarisan kelas dan penimpaan perilaku. Keduanya memungkinkan akses di luar modul yang mendefinisikan, tetapi hanya `open` yang mengizinkan pewarisan dan penimpaan metode di luar modul tersebut.

Fitur Buka publik
Modul luar yang dapat diakses Ya Ya
Subkelas yang dapat dibuat di luar modul Ya Tidak
Dapat ditimpa di luar modul Ya Tidak

Contoh kasus penggunaan: Pengembang kerangka kerja menggunakan public ketika mereka ingin menampilkan fungsionalitas tetapi mencegah kustomisasi. open Digunakan ketika ekstensibilitas diinginkan, seperti kerangka kerja UI yang memungkinkan kustomisasi subkelas.

Perbedaan ini memungkinkan Swift untuk menyeimbangkan keamanan dengan kemampuan perluasan dalam desain API.


23) Apa yang dimaksud dengan inisialisasi malas (lazy initialization) dalam Swift, dan kapan sebaiknya digunakan?

Inisialisasi tunda menunda pembuatan properti hingga diakses untuk pertama kalinya. SwiftHal ini dicapai dengan menggunakan lazy kata kunci ini umumnya digunakan untuk meningkatkan kinerja dan mengurangi penggunaan memori yang tidak perlu.

Contoh:

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

Properti lazy sangat berguna ketika inisialisasi memakan biaya besar, seperti memuat file, permintaan jaringan, atau koneksi basis data. Properti ini harus selalu dideklarasikan sebagai variabel (var) karena nilainya ditetapkan setelah inisialisasi.

Inisialisasi tunda (lazy initialization) meningkatkan kinerja saat memulai dan efisiensi sumber daya jika digunakan dengan tepat.


24) Apa yang dimaksud dengan ekstensi dalam SwiftLalu, masalah apa yang mereka selesaikan?

Ekstensi memungkinkan pengembang untuk menambahkan fungsionalitas baru ke tipe yang sudah ada tanpa memodifikasi implementasi aslinya. Swift Ekstensi dapat menambahkan metode, properti terhitung, kesesuaian protokol, dan tipe bersarang.

Contoh:

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

Ekstensi mendorong pengorganisasian kode yang lebih bersih dengan cara mengelompokkanping fungsionalitas terkait. Ekstensi sangat berguna saat menyesuaikan tipe dengan protokol atau menambahkan metode utilitas. Tidak seperti subkelas, ekstensi tidak mendukung properti tersimpan, yang menjaga keamanan memori.

Ekstensi membantu menjaga agar kode tetap modular, mudah dibaca, dan mudah dipelihara, terutama dalam proyek-proyek besar.


25) Jelaskan perbedaan antara metode statis dan metode kelas dalam Swift.

Kedua static ke class Kata kunci mendefinisikan metode tingkat tipe, tetapi perilakunya berbeda dalam skenario pewarisan.

Kata kunci Dapat ditimpa penggunaan
statis Tidak Implementasi tetap
kelas Ya Dirancang untuk subkelas

Contoh:

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

penggunaan static ketika perilaku harus tetap tidak berubah di seluruh subkelas. Gunakan class ketika polimorfisme diperlukan. Perbedaan ini penting dalam desain kerangka kerja dan API di mana keputusan ekstensibilitas menjadi penting.


26) Apa yang dimaksud dengan fungsi tingkat tinggi dalam SwiftJawablah dengan contoh.

Fungsi tingkat tinggi adalah fungsi yang menerima fungsi lain sebagai parameter atau mengembalikan fungsi sebagai hasilnya. Swift sangat mendukung konsep ini melalui penutupan dan metode penagihan.

Fungsi tingkat tinggi yang umum meliputi:

  • map
  • filter
  • reduce
  • compactMap
  • flatMap

Contoh:

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

Fungsi tingkat tinggi (higher-order functions) meningkatkan ekspresivitas kode dan mengurangi pengulangan kode imperatif. Fungsi ini banyak digunakan dalam pemrograman fungsional dan merupakan hal mendasar dalam menulis kode yang bersih dan deklaratif. Swift kode.


27) Apa itu siklus retensi, dan bagaimana cara mencegahnya? Swift?

Siklus retensi terjadi ketika dua atau lebih instance kelas memegang referensi kuat satu sama lain, mencegah ARC untuk membebaskannya. Hal ini mengakibatkan kebocoran memori.

Skenario umum:

Penutupan yang menangkap self sangat berpengaruh di dalam kelas.

Teknik pencegahan:

  • penggunaan weak referensi
  • penggunaan unowned referensi
  • Daftar tangkapan dalam penutupan

Contoh:

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

Memahami siklus retensi sangat penting untuk membangun aplikasi iOS yang hemat memori, terutama saat bekerja dengan closure dan delegate.


28) Jelaskan perbedaan antara kode sinkron dan asinkron dalam Swift.

SyncKode asinkron menghentikan eksekusi hingga tugas selesai, sedangkan kode asinkron memungkinkan eksekusi berlanjut sementara tugas berjalan di latar belakang.

Aspek Synchonous Asinkron
Execution Pemblokiran Non-blocking
Performance UI yang lebih lambat UI responsif
Gunakan kasing Tugas sederhana Panggilan jaringan

Swift menangani pemrograman asinkron menggunakan GCD, penangan penyelesaian, dan async/menungguKode asinkron sangat penting untuk menjaga pengalaman pengguna yang lancar dalam aplikasi dunia nyata.


29) Apa yang Dapat Dikodekan dalam SwiftLalu mengapa hal itu bermanfaat?

Codable adalah protokol yang memungkinkan pengkodean dan dekode data dengan mudah antara Swift objek dan representasi eksternal seperti JSON atau Property List. Ini menggabungkan Encodable ke Decodable.

Contoh:

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

Codable mengurangi kode berulang dan meningkatkan keandalan saat menangani API. Ia memastikan keamanan tipe dan terintegrasi dengan mulus dengan Swiftpustaka standar , menjadikannya solusi pilihan untuk serialisasi data.


30) Apa perbedaan utama antara Array, Set, dan Dictionary? Swift?

Swift menyediakan tiga jenis koleksi utama, masing-masing dioptimalkan untuk kasus penggunaan yang berbeda.

Koleksi Memerintahkan Nilai-nilai Unik Berbasis Kunci
susunan Ya Tidak Tidak
set Tidak Ya Tidak
Kamus Tidak Kunci unik Ya

Memilih koleksi yang tepat akan meningkatkan kinerja dan kejelasan. Array paling cocok untuk data yang terurut, Set untuk keunikan, dan Dictionary untuk pencarian berbasis kunci yang cepat.


31) Apa itu Pemrograman Berorientasi Protokol dalam Swift, dan mengapa metode ini lebih disukai daripada pewarisan?

Pemrograman Berorientasi Protokol (POP) adalah filosofi desain inti dalam Swift Pendekatan ini menekankan pendefinisian perilaku menggunakan protokol daripada terlalu bergantung pada pewarisan kelas. Dalam POP, protokol mendefinisikan apa yang dapat dilakukan oleh suatu tipe, dan ekstensi protokol menyediakan implementasi default. Pendekatan ini menghindari banyak masalah yang terkait dengan hierarki pewarisan yang dalam, seperti keterkaitan yang erat dan kelas dasar yang rapuh.

POP bekerja dengan struct, enum, dan class, sehingga lebih fleksibel daripada pewarisan berorientasi objek. Ia juga mendorong komposisi daripada pewarisan, yang meningkatkan kemampuan pengujian dan skalabilitas.

Contoh: Swifttipe pustaka standar seperti Array ke Dictionary sangat bergantung pada protokol seperti Sequence ke Collection, menunjukkan bagaimana POP memungkinkan perilaku yang dapat digunakan kembali dan konsisten di berbagai tipe yang tidak terkait.


32) Jelaskan perbedaan antara pola delegasi dan notifikasi di iOS menggunakan Swift.

Delegasi dan notifikasi adalah dua pola komunikasi umum dalam pengembangan iOS. Delegasi menetapkan satu-ke-satu Hubungan di mana satu objek berkomunikasi kembali ke objek lain melalui sebuah protokol. Notifikasi mengikuti suatu proses. Satu-ke-banyak model di mana banyak pengamat dapat mendengarkan peristiwa.

Aspek Delegasi Pemberitahuan
Hubungan Satu-ke-satu Satu-ke-banyak
Kopel Ketat Longgar
Performance Lebih cepat Sedikit lebih lambat
Gunakan kasing Tindakan pengguna Acara global

Delegasi ideal untuk menangani interaksi pengguna, sedangkan notifikasi lebih cocok untuk menyiarkan perubahan di seluruh sistem seperti tampilan keyboard.


33) Apa perbedaan antara frame dan bounds dalam Swift Pengembangan UI?

frame ke bounds Menentukan ukuran dan posisi tampilan, tetapi dalam sistem koordinat yang berbeda. frame bersifat relatif terhadap superview, sedangkan bounds bersifat relatif terhadap pandangan itu sendiri.

Milik bingkai batas
Sistem koordinasi Tampilan orang tua Pandangan pribadi
Posisi yang termasuk di dalamnya Ya Tidak
Terpengaruh oleh transformasi Ya Tidak

Memahami perbedaan ini sangat penting saat melakukan animasi, transformasi, atau operasi menggambar kustom.


34) Bagaimana cara kerja Auto Layout di SwiftLalu, apa saja kendalanya?

Auto Layout adalah sistem tata letak yang secara dinamis menghitung ukuran dan posisi tampilan berdasarkan batasan. Batasan mendefinisikan hubungan seperti jarak, perataan, dan rasio ukuran antara elemen UI.

Auto Layout menyesuaikan tata letak dengan berbagai ukuran layar, orientasi, dan pengaturan aksesibilitas. Batasan dapat didefinisikan menggunakan Interface Builder, anchor, atau secara terprogram.

Contoh:

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

Auto Layout memastikan desain UI yang responsif dan adaptif, yang sangat penting untuk aplikasi iOS modern.


35) Apa yang dimaksud dengan batasan generik dalam SwiftJawablah dengan contoh.

Batasan generik membatasi tipe yang dapat digunakan dengan generik, sehingga meningkatkan keamanan tipe. Batasan dapat mengharuskan suatu tipe untuk mematuhi protokol atau mewarisi dari kelas tertentu.

Contoh:

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

Batasan generik sangat penting untuk menulis abstrak yang dapat digunakan kembali namun tetap terkontrol.tracHal ini memungkinkan pengembang untuk memberlakukan persyaratan perilaku sambil tetap menjaga fleksibilitas.


36) Jelaskan perbedaan antara copy, strong, dan weak dalam Swift manajemen memori.

Kata kunci ini mendefinisikan bagaimana referensi dikelola di bawah ARC.

Referensi Jumlah yang dipertahankan Use Case
kuat Meningkatkan Kepemilikan default
lemah Tidak ada kenaikan Hindari siklus retensi
salinan Menciptakan yang baru Isolasi nilai

copy umumnya digunakan dengan koleksi atau string untuk memastikan immutabilitas, sedangkan weak sangat penting untuk pola delegasi.


37) Apa yang dimaksud dengan metode swizzling? SwiftLalu, kapan sebaiknya dihindari?

Method swizzling adalah teknik runtime yang mengubah implementasi metode yang sudah ada. Meskipun ampuh, teknik ini berbahaya dan tidak disarankan. Swift karena hal itu melewati pengamanan pada saat kompilasi.

Penggunaan swizzling dapat menyebabkan perilaku yang tidak terduga, merusak pembaruan sistem, dan mempersulit proses debugging. Metode ini sebaiknya hanya digunakan dalam skenario terkontrol seperti analitik atau kerangka kerja debugging.

SwiftPenekanan pada keselamatan dan pengiriman statis menjadikan swizzling sebagai pilihan terakhir.


38) Bagaimana caranya Swift Menangani keamanan thread dan kondisi race data?

Swift menangani konkurensi menggunakan GCD, kunci, dan metode modern Swift Model konkurensiAktor merupakan fitur kunci yang menyediakan isolasi data dengan memastikan hanya satu tugas yang dapat mengakses status yang dapat diubah pada satu waktu.

Contoh:

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

Aktor menyederhanakan keamanan thread dan mengurangi kemungkinan terjadinya data race, sehingga membuat pemrograman konkuren lebih aman dan mudah didekati.


39) Apa perbedaan antara @escaping dan non-escaping penutupan di Swift?

Penutupan tidak bersifat eskaping Secara default, artinya kode tersebut dieksekusi dalam lingkup fungsi. Escaping Closure tetap ada meskipun panggilan fungsi telah berakhir dan harus ditandai secara eksplisit dengan @escaping.

Aspek Non-Escaping Umpanping
Lifetime Pendek Panjang
Performance Lebih cepat Sedikit overhead
Gunakan kasing Logika langsung Panggilan balik asinkron

Memahami escaping Penutupan (closures) sangat penting untuk manajemen memori dan menghindari siklus retensi (retain cycles).


40) Apa keuntungan dan kerugian menggunakan SwiftUI dibandingkan dengan UIKit?

SwiftUI adalah kerangka kerja UI deklaratif yang diperkenalkan oleh Apple, sedangkan UIKit bersifat imperatif.

SwiftKeunggulan UI SwiftKekurangan UI
Less pelat ketel Dukungan mundur terbatas
Pratinjau langsung Less dewasa
Sintaks deklaratif Lebih sedikit kait kustomisasi

SwiftUI mempercepat pengembangan, tetapi UIKit tetap diperlukan untuk aplikasi yang kompleks atau aplikasi lama. Banyak aplikasi produksi menggunakan pendekatan hibrida.


๐Ÿ” Atas Swift Pertanyaan Wawancara dengan Skenario Dunia Nyata & Respons Strategis

1) Apa saja fitur-fitur utama dari Swift Apa yang membedakannya dari Objective-C?

Diharapkan dari kandidat: Pewawancara ingin menilai pemahaman Anda tentang Swift dasar-dasar dan mengapa metode ini lebih disukai untuk pengembangan iOS modern.

Contoh jawaban: Swift menawarkan keamanan tipe yang kuat, opsi opsional untuk mencegah kesalahan referensi null, manajemen memori otomatis melalui ARC, dan peningkatan keterbacaan dengan sintaks yang bersih. Ia juga menyediakan fitur-fitur canggih seperti tipe nilai, pemrograman berorientasi protokol, dan pencocokan pola, yang membuat aplikasi lebih aman dan mudah dipelihara dibandingkan dengan Objective-C.


2) Bisakah Anda menjelaskan perbedaan antara tipe nilai dan tipe referensi dalam Swift?

Diharapkan dari kandidat: Pewawancara sedang menguji pemahaman Anda tentang manajemen memori dan perilaku data dalam Swift.

Contoh jawaban: Tipe nilai, seperti struct dan enum, disalin saat diberikan nilai atau dilewatkan, sehingga memastikan isolasi data. Tipe referensi, seperti class, berbagi referensi memori yang sama, artinya perubahan di satu tempat memengaruhi semua referensi. Memilih di antara keduanya bergantung pada apakah diperlukan keadaan mutable bersama.


3) Bagaimana cara kerja optional di Swift, dan mengapa hal itu penting?

Diharapkan dari kandidat: Pewawancara ingin mengetahui bagaimana Anda menangani nilai nil dengan aman dan menghindari kerusakan saat runtime.

Contoh jawaban: Optional merepresentasikan ada atau tidaknya suatu nilai. Hal ini penting karena memaksa pengembang untuk secara eksplisit menangani kasus nil menggunakan optional binding, optional chaining, atau guard statement. Desain ini secara signifikan mengurangi crash yang tidak terduga dan meningkatkan stabilitas aplikasi.


4) Jelaskan situasi di mana Anda menggunakan pemrograman berorientasi protokol dalam Swift.

Diharapkan dari kandidat: Pewawancara ingin melihat bagaimana Anda menerapkan pengetahuan tingkat lanjut. Swift konsep dalam proyek nyata.

Contoh jawaban: Dalam peran saya sebelumnya, saya menggunakan pemrograman berorientasi protokol untuk mendefinisikan perilaku bersama di berbagai model tampilan. Dengan menggunakan protokol dengan implementasi default, saya mengurangi duplikasi kode dan meningkatkan kemampuan pengujian sambil tetap menjagaping komponen yang terhubung secara longgar.


5) Bagaimana Anda mengelola memori secara efektif dalam Swift aplikasi?

Diharapkan dari kandidat: Pewawancara sedang mengevaluasi pemahaman Anda tentang ARC dan pertimbangan kinerja.

Contoh jawaban: Di posisi sebelumnya, saya mengelola memori dengan hati-hati menggunakan referensi lemah dan tidak dimiliki untuk menghindari siklus retensi, terutama dalam pola penutupan dan delegasi. Saya juga menggunakan Instruments untuk mengidentifikasi kebocoran memori dan memastikan pengontrol tampilan dibebaskan dengan benar.


6) Bagaimana Anda menangani operasi asinkron di Swift?

Diharapkan dari kandidat: Pewawancara ingin mengetahui bagaimana Anda mengelola konkurensi dan responsivitas dalam aplikasi.

Contoh jawaban: Saya menangani operasi asinkron menggunakan Grand Central Dispatch dan Swift Fitur konkurensi seperti async dan await. Alat-alat ini memungkinkan saya untuk menjaga antarmuka pengguna tetap responsif sambil melakukan tugas latar belakang seperti panggilan jaringan atau pemrosesan data.


7) Jelaskan bug menantang yang Anda temui di Swift proyek dan bagaimana Anda menyelesaikannya.

Diharapkan dari kandidat: Pewawancara sedang menilai pendekatan pemecahan masalah dan keterampilan debugging Anda.

Contoh jawaban: Di pekerjaan saya sebelumnya, saya pernah mengalami crash yang disebabkan oleh force-unwrap.ping Ini merupakan masalah opsional selama respons jaringan. Saya menyelesaikannya dengan memperkenalkan pengikatan opsional yang tepat dan menambahkan pemeriksaan defensif, yang menghilangkan kerusakan dan meningkatkan penanganan kesalahan di seluruh modul.


8) Bagaimana Anda memastikan kualitas dan pemeliharaan kode dalam Swift proyek?

Diharapkan dari kandidat: Pewawancara ingin memahami disiplin pengembangan Anda dan praktik kerja tim.

Contoh jawaban: Saya memastikan kualitas kode dengan mengikuti cara-cara berikut. Swift Pedoman gaya penulisan kode, penulisan kode modular, dan penggunaan konvensi penamaan yang bermakna. Saya juga mengandalkan tinjauan kode, pengujian unit, dan dokumentasi untuk memastikan basis kode tetap mudah dipelihara dan dipahami oleh seluruh tim.


9) Bagaimana Anda akan menangani situasi di mana sebuah fitur harus segera dikembangkan tetapi persyaratannya tidak jelas?

Diharapkan dari kandidat: Pewawancara ingin mengevaluasi kemampuan komunikasi dan pengambilan keputusan Anda di bawah tekanan.

Contoh jawaban: Saya akan mulai dengan mengklarifikasi persyaratan inti dengan para pemangku kepentingan dan mengidentifikasi fungsionalitas minimum yang layak. Kemudian, saya akan mengkomunikasikan asumsi dengan jelas, mengimplementasikan fitur secara iteratif, dan tetap fleksibel untuk memasukkan umpan balik sambil memenuhi tenggat waktu.


10) Apa yang memotivasi Anda untuk bekerja dengan Swift dan pengembangan iOS?

Diharapkan dari kandidat: Pewawancara ingin memahami gairah dan minat jangka panjang Anda terhadap teknologi tersebut.

Contoh jawaban: Dalam peran saya sebelumnya, saya termotivasi oleh SwiftFokus saya adalah pada keamanan, kinerja, dan desain bahasa modern. Membangun aplikasi yang berdampak langsung pada pengguna sambil bekerja dengan ekosistem yang terus berkembang membuat saya tetap termotivasi dan bersemangat untuk tumbuh sebagai seorang pengembang.

Ringkaslah postingan ini dengan: