推荐答案
在 Swift 中,类型属性是使用 static
关键字定义的。类型属性属于类型本身,而不是类型的实例。类型属性可以是存储属性或计算属性。
定义存储类型属性
class SomeClass { static var storedTypeProperty: Int = 42 }
定义计算类型属性
struct SomeStruct { static var computedTypeProperty: Int { return 100 } }
定义类类型计算属性
对于类类型,可以使用 class
关键字来定义可被子类重写的计算类型属性:
class SomeClass { class var overridableComputedTypeProperty: Int { return 200 } }
本题详细解读
类型属性的概念
类型属性是属于类型本身的属性,而不是类型的实例。这意味着无论创建多少个实例,类型属性都只有一份。类型属性通常用于定义与类型相关的常量或变量,例如全局配置、共享资源等。
存储类型属性
存储类型属性是直接存储值的属性。它们可以是变量(var
)或常量(let
)。存储类型属性必须有一个默认值,因为类型本身没有初始化器来为它们赋值。
计算类型属性
计算类型属性不直接存储值,而是通过计算来获取值。它们可以是只读的(只有 get
方法)或可读写的(有 get
和 set
方法)。
类类型计算属性
对于类类型,使用 class
关键字定义的计算类型属性可以被子类重写。这使得子类可以提供自己的实现来覆盖父类的计算类型属性。
访问类型属性
类型属性通过类型名直接访问,而不是通过实例访问:
print(SomeClass.storedTypeProperty) // 输出: 42 print(SomeStruct.computedTypeProperty) // 输出: 100 print(SomeClass.overridableComputedTypeProperty) // 输出: 200
注意事项
- 类型属性是延迟初始化的,这意味着它们只有在第一次被访问时才会被初始化。
- 类型属性是线程安全的,Swift 会确保它们的初始化只发生一次。