Lang:简体中文

swift常用面试题

日期:2025-09-08 / 来源:面试宝典

涵盖语法、特性、编程思想等要点

swift作为一门功能强大的编程语言,在面试中常常会被重点考察。下面就为大家详细介绍一些swift常用面试题。

基础语法类

首先经常会问到的是let和var的区别。let用于定义常量,一旦赋值就不能再改变;而var用于定义变量,可以在后续代码中修改其值。例如:

let num = 10 // 这里num不能再被赋值

var age = 20 // age可以后续修改,如age = 21

还有可选类型的问题。可选类型允许变量有值或者没有值(nil)。使用可选绑定可以安全地解包可选类型。比如:

var name: string? = "john"

if let unwrappedname = name {

print("the name is \(unwrappedname)")

} else {

print("name is nil")

}

面向对象类

面试中会考察类和结构体的区别。类是引用类型,结构体是值类型。类支持继承,而结构体不支持。例如:

class person {

var name: string

init(name: string) {

self.name = name

}

}

struct student {

var name: string

}

另外,属性和方法也是重点。属性分为存储属性和计算属性,计算属性不直接存储值,而是通过getter和setter来计算值。

闭包相关类

闭包是自包含的代码块,可以在代码中被传递和使用。常见问题是闭包的捕获列表。捕获列表用于解决闭包引起的循环引用问题。例如:

class myclass {

var closure: (() -> void)?

var value = 10

init() {

closure = { [weak self] in

if let strongself = self {

print(strongself.value)

}

}

}

}

协议与扩展类

协议定义了一组方法和属性的规范,类、结构体和枚举可以遵循协议。扩展可以为现有的类型添加新的功能。比如定义一个协议:

protocol printable {

func printinfo()

}

然后让一个类遵循该协议:

class book: printable {

func printinfo() {

print("this is a book")

}

}

扩展可以这样使用:

extension int {

func square() -> int {

return self * self

}

}

let num = 5

print(num.square())

内存管理类

swift使用自动引用计数(arc)来管理内存。循环引用是一个重要考点,它会导致内存泄漏。例如两个类相互持有对方的强引用:

class a {

var b: b?

}

class b {

var a: a?

}

var obja = a()

var objb = b()

obja.b = objb

objb.a = obja

解决循环引用可以使用弱引用(weak)或无主引用(unowned)。

以下为推荐内容

微信二维码