1. 作为特定类或结构实例的一部分,存储属性存储着常量或者变量的值。存储属性可分为变量存储属性(关键字var描述)和常量存储属性(关键字let描述)。
struct student{ let name = "" var score = 0 } let a = student(name:"小笨狼",score:96)
注意:
① 定义储存属性时,需要为每一个属性定义一个默认值。在初始化的时候,可以设置属性的初始值
② 对于结构当用let创建一个常量实例时(如let a),这个实例中的属性将不可改变,即使属性是变量属性(a中的score属性也不可改变)。这是因为结构是值类型。当一个值类型实例作为常量而存在,它的所有属性也作为常量而存在。但是这个特性对类并不适用,因为类是引用类型
2. 懒惰储存属性
懒惰存储属性是当它第一次被使用时才进行初值计算。通过在属性声明前加上@lazy来标识一个懒惰存储属性。
当属性初始值因为外部原因,在实例初始化完成之前不能够确定时,就要定义成懒惰存储属性。当属性初始值需要复杂或高代价的设置,在它需要时才被赋值时,懒惰存储属性就派上用场了。
class student{ let name = "" @lazy var score = 0 } var a = student() //这时候score还为被创建 a.score = 98 //score第一次使用时才会被创建 println(a.score) //输出:98注意:
struct XSize{ var xOrigin:Float = 0 var length:Float = 0 } class test{ var size = XSize() var center:Float{ get{ return size.xOrigin + size.length/2 } //get方法,获取值 set(newSize){ size.xOrigin = newSize - size.length/2 } //set方法,存储值 } }如上面例子所示,center并不存储值,只是提供getter和可选的setter来间接地获取和设置其它的属性和值。
2.setter声明的简略写法
如果计算属性的setter方法没有将被设置的值定义一个名称,将会默认地使用newValue这个名称来代替。
class test{ var size = XSize() var center:Float{ get{ return size.xOrigin + size.length/2 } //get方法,获取值 set{ size.xOrigin = newValue - size.length/2 } //set方法,存储值 } }
3. 只读计算属性
只读计算属性只带有一个getter方法,通过点操作符,可以放回属性值,但是不能修改它的值。
class test{ var size = XSize() var center:Float{ get{ return size.xOrigin + size.length/2 } //get方法,获取值 } }
class test{ var size = XSize() var center:Float{ return size.xOrigin + size.length/2 } //get方法,获取值 }
class student{ var name:String = "abc"{ willSet(newName){ println("will set new:\(newName)") //输出:will set new:小笨狼 } didSet(oldName){ println("did set new:\(name),old:\(oldName)") //输出:did set new:小笨狼,old:abc } } } let a = student() a.name = "小笨狼"
struct Student{ static var name = "" static var score:Int{ return 0 } } class School{ class var name:String{ return "NB小学" } }
Student.name = "小笨狼" println(Student.name) //输出:小笨狼 println(School.name) //输出:NB小学重点:
原文地址:http://blog.csdn.net/xbenlang/article/details/30239857