/*
• 存储属性
• 计算属性
• 属性观察器
• 全局变量和局部变量
• 类型属性
*/
//存储属性
//简单来说,一个存储属性就是存储在特定类或结构体实例厘米昂的一个常量或者变量,存储属性可以是变量存储属性(用关键字var定义),也可以是常量存储属性(用关键字let定义)
//下面的例子定义了一个名为 FixedLengthRange 的结构体,该结构体用于描述整数的范围,且这个范围值在被创 建后不能被修改.
struct FixedLengthRange {
var firstValue: NSInteger
let length :NSInteger
}
var rangeOfThreeItems = FixedLengthRange(firstValue:0,length:3)
rangeOfThreeItems.firstValue = 6
//常用结构体的存储属性
//如果创建了一个结构体的实例并将其赋值给一个常量,则无法修改实例的任何属性,即使有属性被声明为变量也不行:
let rangeofFourItems = FixedLengthRange(firstValue:0,length:4)
//该区间表示整数0,1,2,3
rangeOfThreeItems.firstValue = 6
//延迟存储属性
//延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用 lazy 来标示一个延迟存 储属性。延迟属性很有用,当属性的值依赖于在实例的构造过程结束后才会知道影响值的外部因素时,或者当获得属性的初始值需要复杂或大量计算时,可以只在需要的时候计算它。
class DataImporter {
/*
DataImporter 是一个负责将外部文件中的数据导入的类。 这个类的初始化会消耗不少时间。
*/
var fileName = "data.txt"
}
class DataManager {
lazy var importer = DataImporter()
var data = [String]()
}
let manager = DataManager()
manager.data.append("Some data")
manager.data.append("Some more data")
print(manager.importer.fileName)// DataImporter 实例的 importer 属性还没有被创建
//计算属性
//简化setter声明
//只读计算属性
/*只有 getter 没有 setter 的计算属性就是只读计算属性。只读计算属性总是返回一个值,可以通过点运算符访 问,但不能设置新的值。*/
//读计算属性的声明可以去掉 关键字和花括号:
struct Cuboid {
var width = 0.0, height = 0.0, depth = 0.0
var volume: Double {
return width * height * depth
}
}
let fourByFiveByTwo = Cuboid(width: 4.0, height: 5.0, depth: 2.0)
print("the volume of fourByFiveByTwo is \(fourByFiveByTwo.volume)")
// 打印 "the volume of fourByFiveByTwo is 40.0"
//属性观察器
/*
• willSet在新的值被设置之前调用
• didSet在新的值被设置之后立即调用
*/
class StepCounter {
var totalSteps: Int = 0 {
willSet(newTotalSteps) {
print("About to set totalSteps to \(newTotalSteps)")
}
didSet {
if totalSteps > oldValue {
print("Added \(totalSteps - oldValue) steps")
} }
} }
let stepCounter = StepCounter()
stepCounter.totalSteps = 200
// About to set totalSteps to 200
// Added 200 steps
stepCounter.totalSteps = 360
// About to set totalSteps to 360
// Added 160 steps
stepCounter.totalSteps = 896
// About to set totalSteps to 896
// Added 536 steps
//全局变量和局部变量
网友评论