如何通过Swift面试:热门问题与答案

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

引言

iOS/macOS 开发者职位的面试不仅仅是测试 UIKit 或 SwiftUI 框架的知识。首先,雇主评估的是你对 Swift 语言的理解:其语法、内存管理特性、多线程和类型系统。即使你能自信地编写应用程序,如果缺乏理论基础,也容易在技术面试中失败。

在这篇文章中,我们整理了 2025 年 Swift 面试中最常被问到的热门问题。每个问题都附有详细解释和代码示例。无论你是初级开发者还是希望巩固知识的有经验开发者,这份资料都会对你有帮助。



1. 可选类型 (Optionals) 与安全性

为什么 Swift 使用可选类型?

Swift 是一门强类型语言,可选类型是其安全处理 nil 的关键特性。与 Objective-C 中 nil 只是一个空指针不同,在 Swift 中,Optional 是一个包含两个 case 的枚举:none (nil) 和 some(Wrapped)。这迫使开发者显式处理值缺失的情况,从而防止崩溃。



如何从可选类型中提取值?

有几种方法:

  • 强制解包 — 使用 ! 运算符。仅当你绝对确定值不为 nil 时使用。
  • 可选绑定 — 使用 if let 或 guard let 结构。
  • 空合运算符 — 使用 ?? 来提供默认值。


var name: String? = "Alice"

// 强制解包 (危险!)print(name!)

// 可选绑定if let unwrappedName = name { print("Hello, \\(unwrappedName)")}

// 空合运算符let displayName = name ?? "Guest"print(displayName)


什么是隐式解包可选类型 (IUO)?

这是一种在访问时会自动解包的可选类型。使用类型后的 ! 声明。主要用于在 init 之后才初始化的属性(例如 UIKit 中的 IBOutlet)。然而,在现代 Swift (5.x) 中,IUO 的行为类似于常规的可选类型,编译器会对风险发出警告。



2. 内存管理:ARC 与强引用循环

ARC 在 Swift 中如何工作?

自动引用计数 (ARC) 是一种引用计数机制。每个类实例都有一个引用计数。当计数降为零时,对象将从内存中释放。ARC 仅适用于引用类型(类、闭包)。值类型(结构体、枚举)存储在栈上,并通过拷贝进行管理。



什么是强引用循环 (retain cycle)?

当两个对象通过强引用相互引用,且 ARC 无法释放它们时,就会形成循环。这会导致内存泄漏。解决方法是使用弱引用 (weak) 或无主引用 (unowned)。



class Person {    let name: String    var apartment: Apartment?    init(name: String) { self.name = name }    deinit { print("\\(name) deallocated") }}

class Apartment { let unit: String weak var tenant: Person? // weak — 防止循环 init(unit: String) { self.unit = unit } deinit { print("Apartment \\(unit) deallocated") }}

var john: Person? = Person(name: "John")var unit4A: Apartment? = Apartment(unit: "4A")

john?.apartment = unit4Aunit4A?.tenant = john

john = nilunit4A = nil// 两个对象都将被释放


何时使用 weak,何时使用 unowned?

  • weak — 始终为可选类型,当对象被释放时会自动变为 nil。当引用的生命周期可能比所有者短时使用。
  • unowned — 非可选类型,假定对象的生命周期与所有者相同或更长。有风险:如果对象被释放,访问时

博客

书籍推荐