Swift Property 属性

4 篇文章 0 订阅

iOS 开发中属性是一种常用方式,在Swift中属性到底如何声明,如何延时加载(懒加载) 如何监听属性值的变化。

属性类型

Swift 中主要存在两种属性类型,存储属性计算属性,属性可以在结构体 ,枚举 中存在,值得注意的是存储属性只能存在于结构体

属性与特定类型的实例相关,但是也存在类型属性(作用于属性本身)。

存储属性

存在于结构体的常量(let)和变量(var)。

延时加载

为节约空间和时间成本,我们应该避免过度初始化某些属性。lazy 对属性就行修饰。

注意:
必须将延迟属性声明称变量(var),因为属性的初始值可能在实例构造完成之后才会得到。
而常量属性在构造完成之前必须要有初始值

class DataImporter {
    var filename = "data.txt"
}

class DataManager {
    lazy var importer = DataImporter()
    var data = [String]()
}

let manager = DataManager()
manager.data.append("Some data")
manager.data.append("Some more data")

计算属性

计算属性不直接存储值,而是提供了一个getter 和 一个可选的setter, 来简洁获取和设置其它属性或变量的值。

属性观察

属性观察是swift 一个很特殊的特性,swift 为我们提供了两个属性观察的方法,willSet , didSet

Swift 提供了两种属性类型,上述在描述计算属性的时候,我们说过计算类型不包括背后的存储,只提供setget方法。在同类一类型中,属性观察和计算属性是不能同时共存的。计算属性我们可以通过改写set中的内容来达到willSetdidSet同样属性观察的目的。如果无法改动这个类,我们需要子类话这个类,

class Parent {
	var calculateProp: Int {
		get {
			print("getter")
			return 10086
		} set {
			print("setter")
		}
	}
}

class Son: Parent {
	override var calculateProp: Int {
		willSet {
			print("willSet")
		} didSet {
			print("didSet")
		}
	}
}
let son = Son()
son.calculateProp = 10000

//	get
//	willSet
//	set
//	didSet

get首先被调用了一次,由于didSet调用了oldValue

属性作用域

Swift中classstatic是用来修饰类型作用域的,在非class 类型的上下文中使用static,值得注意是对于class 中是不能出现class的存储属性的。
应使用static

class CustomClass {
	static var customProp: XXXX
}

KVO

当我们需要对不同实例对当前的某个属性进行监听时,KVO可以帮我解决这样的需求。swift中的KVO是如何实现的呢。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值