09--swift之属性

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.计算属性

计算属性能够在类,结构体,枚举中定义。计算属性不直接存储值,而是提供一个gettersetter来间接获取和设置其余属性或者变量的值。

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来支持子类对父类的实现进行重写

相关文章
相关标签/搜索