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