*存储属性*
* 具备存储功能,和OC中普通属性一样
* 属性观察器
* 属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会
* 用属性观察器
* 类似于OC中的setter
* 可以为除了延迟存储属性之外的其他存储属性添加属性观察器
* willSet
* 在新的值被设置之前调用
* willSet观察器会将新的属性值作为常量参数传入
* 传入的参数默认名称newValue
* didSet
* 在新的值被设置之后立即调用
* didSet观察器会将旧的属性值作为参数传入
* 传入参数默认参数名oldValue
* 注意:如果在一个属性的didSet观察器里为它赋值,这个值会替换之前设置的值
var title:String? {
didSet{
'' title = name! + "欢迎回来"
'' }
}
*计算属性*
* 计算属性不具备存储功能
* 相当于OC中的readOnly(不完全是)
* 最常见的计算属性:
> * 只有get没有set(只读计算属性)
> * 重写了set但没有给自身赋值也是计算属性
* 注意:
* 必须使用var关键字定义计算属性,包括只读计算属性,因为它们的值不是固定的。let关键字只用来声明常量属性,表示初始化后再也无法修改的值
var age:Int{
'' // 如果只重写了get,没有set. 那么属性是一个"计算型"属性
'' get{
'' return 30
'' }
'' }
'' // 如果只有get可以简写为
'' var gender:String{
'' return "lnj"
'' }
*存储属性和实例变量*
* Objective-C 为类实例存储值和引用提供两种方法。除了属性之外,还可以使用实例变量作为属性值的后端存储
* Swift 编程语言中把这些理论统一用属性来实现, 这就避免了不同场景下访问方式的困扰
* Swift 中的属性没有对应的实例变量,属性的后端存储也无法直接访问
var \_name:String?
var name:String?{
'' get{
'' return _name
'' }
'' set{
'' _name = newValue
'' }
}