「iOS 面试之道」勘误(二)
2024-01-13 12:26:08
Swift 初始化方法的真相
Swift 是一种强大的编程语言,它提供了许多特性来帮助开发者编写出健壮、高效的代码。其中,初始化方法就是 Swift 中非常重要的一个概念。
在 Swift 中,每一个类都可以定义多个初始化方法,这些方法可以用来创建该类的实例。初始化方法可以接收不同的参数,这些参数可以用来指定实例的初始状态。
在「iOS 面试之道」一书中,作者提到了一个关于 Swift 初始化方法的错误说法:
Swift 初始化方法必须保证所有非 Optional 的成员变量都完成初始化。
这个说法是不严谨的。事实上,Swift 初始化方法并不需要保证所有非 Optional 的成员变量都完成初始化。
stored property 与 computed property
为了理解为什么 Swift 初始化方法不需要保证所有非 Optional 的成员变量都完成初始化,我们需要了解 Swift 中的两个概念:stored property 和 computed property。
- stored property:存储型属性,它会在内存中开辟一块空间来存储数据。
- computed property:计算型属性,它不会在内存中开辟一块空间来存储数据,而是通过计算来获取数据。
在 Swift 中,所有的成员变量都可以分为 stored property 和 computed property。如果一个成员变量是 stored property,那么它必须在初始化方法中完成初始化。但是,如果一个成员变量是 computed property,那么它不需要在初始化方法中完成初始化。
示例
下面是一个简单的示例,演示了如何在 Swift 中定义一个 stored property 和一个 computed property:
class Person {
var name: String // stored property
var age: Int { // computed property
return 2023 - birthYear
}
var birthYear: Int // stored property
}
在上面的示例中,name
和 birthYear
都是 stored property,而 age
是一个 computed property。name
和 birthYear
需要在初始化方法中完成初始化,而 age
不需要在初始化方法中完成初始化。
结论
综上所述,Swift 初始化方法并不需要保证所有非 Optional 的成员变量都完成初始化。只有 stored property 需要在初始化方法中完成初始化,而 computed property 不需要在初始化方法中完成初始化。