Swift系列10-属性

属性

属性可以将特定的值和类,结构体,枚举联系起来.
存储属性会存储常量或变量作为实例的一部分,反之计算属性会计算值(而不是存储值).
计算属性可以由类,结构体,枚举进行定义.
存储属性只能由结构体和类进行定义.

属性可以和类型本身相关联,这种属性就是所谓的类型属性.

你可以定义属性观察器来检查属性中值的变化,这样你就可以自定义行为来响应.
属性观测器可以添加到你自定义的存储属性中,也可以添加到子类从他父类继承而来的属性中.

存储属性

存储属性是一个特定类和结构体实例的一部分常量或变量;

1
2
3
4
5
6
7
8
9
//结构体属性
struct NewDay {
var day:Int
let time:Int
}
//
var d1 = NewDay.init(day: 10, time: 11)
d1.day = 20 //变量,定义了之后还可以进行修改
// d1.time = 30 他是一个常量,一经定义不可对其再次进行修改;

延迟属性(懒加载),使用lazy关键字,在属性使用的时候再进行创建实例,否则不会创建.

1
2
3
4
5
6
7
lazy var l1:UILabel = {
let l1 = UILabel.init()
l1.frame = CGRect(x: 0, y: 0, width: 100, height: 100)
l1.backgroundColor = .black
self.view.addSubview(l1)
return l1
}()

计算属性

除了存储属性,类,结构体和枚举也能够定义计算属性,而它实际并不存储值.相反,他们提供一个读取器和一个可选的设置器来间接得到和设置其他的属性和值(set和get方法).

1
2
3
4
5
6
7
8
9
10
11
//计算属性,set和get
var number:Int = 0
var allPoint: Int{
get{
return number
}
set(newOne){
number = newOne
print("赋值 \(number)")
}
}

只读属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//案例1,省略get
var space:Int{
return 100
}
print(space)
//space = 200 重新赋值时,会报错

//案例2
struct Numbers {
var n1 = 10,n2 = 20
var n3:Int{
return n1 * n2//添加常量或者变量去接收
}
}
var num = Numbers.init()
num.n1 = 20
num.n2 = 20
print(num.n3)

全局和局部变量

全局函数是定义在任何函数,方法,闭包或者类型环境之外的变量.
局部变量是定义在函数,方法,或者闭包环境之中的变量.

The End