1.属性简介swift
在类,结构体,枚举中都用属性,属性将值跟特定的类,结构体,枚举关联闭包
。存储属性存储变量或者常量做为实例的一部分,而计算属性计算一个值。函数
计算属性能够用于类,结构体,枚举,而存储属性只能用于类和结构体spa
,不能用于枚举。属性能够分为实例属性和类属性。orm
2.存储属性继承
struct Point {ci
var x: Int = 1get
var y: Int = 3it
let someValue: Int = 4class
3.常量结构体的存储属性
struct Point {
var x: Int
var y: Int
}
let r = Point(x: 3, y: 5)
r.x = 6
r.y = 7//会报错,由于r为常量结构体,即便x,y是变量属性也不能修改
4.延迟存储属性
当第一次被调用的时候才会计算其初始值的属性。在属性声明前使用lazy来标示一个延迟存储属性
class a {
init(){
print("init a..")
}
func f1(){
print("f1")
}
}
class b{
lazy var r: a = a()//加上lazy后就不实例化a了,只有调用时才实例化
init(){
print("init b")
}
}
var c = b()
5.计算属性
计算属性能够在类,结构体,枚举中定义。计算属性不直接存储值,而是提供一个getter,setter来间接获取和设置其余属性或者变量的值。
struct Rect {
var w:Double!
var h: Double!
var circle: Double{
get {
return (w+h)*2
}
set{
w = newValue/4
h = newValue/4
print("newvalue=\(newValue)")
}
}
}
var r = Rect(w: 20, h: 40)
print(r.circle)
print(r.h)
print(r.w)
r.circle = 200
print(r.h)
print(r.circle)//circle就是计算属性
6.便捷setter,计算属性中setter可选。
7.只读计算属性,只有getter没有setter的计算属性。
只读计算属性老是返回一个值,能够经过点运算符访问,但不能设置新的值。
8.属性观察器
注意:属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和如今的值相同的时候也不例外。还能够为除了延迟存储属性以外的其余存储属性添加属性观察器,也能够经过重载属性的方式为继承的属性添加属性观察器。观察器有willSet:在新的值被设置以前调用和didSet:在新的值被设置以后当即调用
class Animal {
var age:Int = 1{
willSet(newValue){
print("newValue=\(newValue)")
if newValue<=0{
print("false")
}
}
didSet{
print("did set")
}
}
}
var a = Animal()
a.age = 1
a.age = -2
9.全局变量,局部变量
计算属性和属性观察器所描述的模式也能够用于全局和局部,全局变量是在函数,方法,闭包,任意类型以外定义的变量,局部变量是在内部定义的变量。
10.类型属性和实例属性
值类型的存储型类型属性能够是常量或者变量,计算型类型属性跟实例的计算属性同样只能定义成变量属性
与oc不一样,在swift中,类型属性是做为类型定义的一部分写在类型最外层的括号内,所以它的做用范围也就在类型支持的范围内。
使用关键字static来定义类型属性。在为类(class)定义计算类型属性时,可使用关键字class来支持子类对父类的实现进行重写