属性分类
计算属性可以用于类、结构体和枚举;存储属性只能用于类和结构体
存储属性
- 存储变量(var)、常量属性(let)
- 延迟存储属性(lazy var):第一次调用时才会计算其初始值,常量无法声明成延迟属性
计算属性
- 不直接存储值,而是提供一个getter和一个可选的setter, 必须用 var 定义
- 只读计算属性的声明可以去掉get关键字和花括号
- 如果setter没有定义表示新值的参数名,则可以使用默认名称 newValue
类型属性
- 使用关键字static来定义类型属性
- 在为类定义计算型类型属性时,可以改用关键字class
- class不能修饰类的存储属性,static可以修饰类的存储属性
- 跟实例的存储型属性不同,必须给存储型类型属性指定默认值
class SomeClass {
static var storedTypeProperty = "Some value."
static var computedTypeProperty: Int {
return 27
}
class var overrideableComputedTypeProperty: Int {
return 107
}
}
属性观察器
- 可以为除了延迟存储属性之外的其他存储属性添加属性观察器
- 也可以通过重写属性的方式为继承的属性(包括存储属性和计算属性)添加属性观察器
- willSet观察器会将新的属性值作为常量参数传入,可以为这个参数命名或使用默认名称newValue
- didSet观察器会将旧的属性值作为参数传入,可以为该参数命名或者使用默认参数名oldValue
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
}
}
}
}
网友评论