Swift 之存储属性和计算属性

1、存储属性

  • 存储属性存储常量或者变量作为实例的一部分,用于类和结构体
  • 可以的在定义的时候指定默认值
    可以在构造过程中设置或修改存储属性的值

1.1 延迟存储属性

  • 指第一次被调用时才会计算初始值的属性,也就是懒加载
  • 实现方式: lazy var a = A()

注意: 延迟属性必须用 var 关键字修饰,因为它的初始值在初始化完成时是不会被设置的

  • 适用场景:当属性依赖外部因素(构造过程,初始值复杂,大量计算),适合用延迟属性
class GPSTrackViewController: UIViewController { 
	var track: GPSTrack = GPSTrack()
	lazy var preview: UIImage = { 
		for point in track.record {
			// 进行昂贵的计算
		}
		return UIImage(/* ... */) 
	}()
}
  • 延迟属性需要存储,所以需要在 GPSTrackViewController 的定义中加入这个延迟属性
  • 和计算属性不同,存储属性和延迟存储属性不能被定义在扩展中

2、计算属性

  • 计算属性不使用任何内存存储自己的值,每次调用都会实时计算
  • 计算属性可以用在类、结构体和枚举
  • 计算属性提供一个 getter 和一个可选的 setter 来间接获取、设置其他属性和变量的值

外部只读,内部可读写可以用 private(set) 修饰

struct GPSTrack {
	private(set) var record: [(CLLocation, Date)] = []
}

只读属性

结果不会被缓存,每次访问,都会重新计算

struct GPSTrack {
	var timestamps: [Date] {
		return record.map { $0.1 } 
	}
}
  • 参考资料
    https://www.jianshu.com/p/07b7cb4ef603
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值