Swift语言长征之路(第三天)

属性:存储属性、计算属性。存储属性和计算属性通常和特定类型的实例相关联。

存储属性只能由类、结构体定义。

计算属性可以由类、结构体、枚举定义。


存储属性

一个实例的存储属性既可以有常量存储属性(let关键字定义),也可以有变量存储属性(var关键字定义)。如下:

/*
结构体是值类型,类是引用类型。当一个值类型的实例被标记为常量时,该实例的其他属性也均为常量。
类是引用类型,如果你给常量复制饮用类型实例,仍然可以修改实例的变量属性。
*/
struct Abc{
var x : Int
let y : Int
}

var c = Abc(x:0, y:1) //x是变量存储属性,y是常量存储属性,y一旦赋值则不可修改

let d = Abc(x:2, y:3) //因为d是定义为常量,它所代表的Abc的实例叫常量结构体,常量结构体里的存储属性不管是变量存储属性还是常量存储属性,均不可修改。

/*
下面再列举类的实例,用以说明“类实例的存储属性” 与 “结构体实例的存储属性” 的不同之处
*/

class Abc1{
var i : Int = 4
let j : Int = 1
}

var c1 = Abc1() //i是变量存储属性,j是常量存储属性,y一旦赋值则不可修改
c1.i=1

let d1 = Abc1() //因为类为饮用类型,即便d1定义为常量,它所代表的实例仍可以修改i这个变量属性的值
d1.i=2

如果一个变量存储属性不是在每次初始化时都会用到,只需要在第一次使用时才进行计算的话,可以在其声明前加关键字lazy(即延迟存储属性)。

延迟存储属性必须定义为变量,因为变量的初始值可以不用在初始化完成之前取得,但是常量属性必须在初始化完成之前取得值。

例如:

struct A1{
	//var j = 4
	var x : Int=0
}

var a = A1(x:1)
print("a的属性x的值为\(a.x)")

/*
/在类中定义lazy属性
*/
class B1{
	//var i = 3
	lazy var y = A1()
}
var b = B1()
print("b的属性y的值为\(b.y.x)")

/*
在结构体中定义lazy属性
*/
struct C1{
	lazy var z = A1()
}
var c = C1()
print("c的属性z的值为\(c.z.x)")

执行结果:

a的属性x的值为1
b的属性y的值为0
c的属性z的值为0

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值