声 明
本教程仅用于初学SWIFT同学使用,内容由本人(孤狼)学习过程中笔记编写,本教程使用SWIFT版本为2.0。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。PAEA.CN版权所有。
Hello,欢迎回到和屌丝一起学SWIFT系列教程中来,上节我们说了类和结构体,不知道大家有没有学会呢?它们可是很重要的哦,记得一定好好好复习哦.这节我们来一起学习一个和它们相关的东西-属性.这节也很重要,因为你以后会经常用到这些.
属性
属性分为存储属性和计算属性.顾名思义,存储属性用来存储数据,计算属性用来参与计算.
[存储属性]
存储属性就是用来保存数据的属性,大类分为常量存储属性及变量存储属性.分别使用 var 和 let 来定义.(这里和变量的定义基本一致)
struct A{
var a1=0;
let a2=100;
}
var b1=A();
print(b1.a2); //输出"100"
b1.a2=800; //报错,因为a2属性使用的是let定义的常量无法修改
let b2=A();
b2.a1=800; //报错,因为b2是一个常量,所以就算他的属性是变量,也无法修改.
[延迟存储属性]
延迟存储属性,也就是属性会延迟创建,这算是一个区别于其他语言的特点.我们使用 lazy 关键字来定义一个延迟存储属性.这里需要注意的是,因为属性会后期赋值,所以必须使用变量方式来定义(var).延迟存储属性只有在被调用的时候,才会开始创建.可以把耗时较长的方法设置为延迟.避免第一次加载时耗时过长.
class C{
lazy var str="我延迟了";
}
[计算属性]
计算属性不用来存储数据,而是通过计算得出变量.计算属性,需要通过get或set方法来进行获取和设置.其中set方法可以舍去,成为只读计算属性.
TIP:在get方法中最后一定要使用return来返回,否则报错.
struct D{
var num=0;
var fun:Int{
get{
return num+10;
}
set(newNum){
num=newNum;
}
}
}
var d=D();
print(d.fun); //输出"10"
d.num=10; //通过直接修改方法设置
print(d.fun); //输出"20"
d.fun=30; //通过set方法设置
print(d.fun); //输出"40"
[属性观察器]
属性观察器监控和响应属性值的变化,每次属性被设置值的时候都会调用属性观察器,甚至新的值和现在的值相同的时候也不例外。
属性观察器有两种,willSet和didSet,即设置前和设置后.
struct E{
var num=0{
willSet{
print(num);
}
didSet{
print(num);
}
}
}
var e=E();
e.num=10;
//输出:"0","10"