09--swift之属性

原创
2016/03/09 16:13
阅读数 17

1.属性简介

在类,结构体,枚举中都用属性,属性将值跟特定的类,结构体,枚举关联

。存储属性存储变量或者常量作为实例的一部分,而计算属性计算一个值。

计算属性可以用于类,结构体,枚举,而存储属性只能用于类和结构体

,不能用于枚举。属性可以分为实例属性和类属性。


2.存储属性


struct Point {

var x: Int = 1

var y: Int = 3

let someValue: Int = 4

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


展开阅读全文
打赏
1
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
1
分享
返回顶部
顶部