属性
存储属性
定义
一个存储属性就是存储在特定类或结构体的实例里的一个常量或变量
见Xcode
mutating
“Structures and enumerations are value types.
By default, the properties of a value type cannot be modified from within its instance methods.”
结构体和枚举是值类型。一般情况下,值类型的属性不能在它的实例方法中被修改。
延迟存储属性
相当于OC 的懒加载
延迟存储属性是指当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用lazy来标示一个延迟存储属性。
必须将延迟存储属性声明成变量(使用var关键字),因为属性的初始值可能在实例构造完成之后才会得到。而常量属性在构造过程完成之前必须要有初始值,因此无法声明成延迟属性。
存储属性和实例变量
在OC 中属性有对应的实例变量,在Swift中没有实例变量
计算属性
计算属性 :可以用于类、结构体和枚举, 不能赋初始值, 主要为我们提供get set方法 必须用var关键字定义
便捷setter声明
如果 setter 方法后 没有定义标识新值的参数名,可以使用默认名称newValue
只读 属性
不写setter方法 可以省略get 关键字
属性观察器
属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新值和当前值相同的时候也不例外。
可以为属性添加如下的一个或全部观察器:
- willSet在新的值被设置之前调用
- didSet在新的值被设置之后立即调用
类属性
使用关键字static来定义类型属性,
在为类定义计算型类型属性时,可以改用关键字class来支持子类对父类的实现进行重写
注意
跟实例的存储型属性不同,必须给存储型类型属性指定默认值,因为类型本身没有构造器,也就无法在初始化过程中使用构造器给类型属性赋值。
存储型类型属性是延迟初始化的,它们只有在第一次被访问的时候才会被初始化。即使它们被多个线程同时访问,系统也保证只会对其进行一次初始化,并且不需要对其使用
lazy
修饰符。
##方法
类方法 static 类中可改用Class 关键字支持子类重写类方法