在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
属性将值和类,结构,枚举相关联。属性分为计算属性和存储属性。存储属性存储常量或变量作为实例的一部分 ,计算属性计算一个值。存储属性用于类和结构体,计算属性用于类,结构体和枚举。 1:存储属性 存储属性是存储类或结构体的实例里的一个常量或变量。 struct Range{ var length:Int let height:Int } var testRang = Range(length:1, height:2) testRang.length = 3 2:常量和存储属性 如果将结构体的实例定义为一个常量,则不能修改实例的任何属性。 struct Range{ var length:Int let height:Int } let testRang = Range(length:1, height:2) //testRang.length = 3 error 其原因在于结构体(struct)是值类型,其实例被定义成常量后它结构体的所有属性都是常量类型。 但如果是class类类型,定义成常量后,实例的变量类型依然可以被修改。类是引用类型。 3:延迟存储属性。@lazy表示一个变量(只能是变量var)声明为延迟存储属性,这样在实例创建时候变量不会创建,只有引用到该变量时候才会创建 class BigConstructor{ var strMsg = "big msg" } class CLazyVar{ @lazy var lazyVar = BigConstructor() var strName = "tset" } import Foundation var obj = CLazyVar(); obj.strName = "sx"//lazyVar还没被创建 println("\(obj.strName) \(obj.lazyVar)")//这时候才创建 4:属性和实例变量 swift语言没有使用变量来做存储,统一使用属性访问。 5: 计算属性。计算属性提供一个get/set来 获取/改变 其他属性的值 class CValue{ var strName:String = "xx" var value:String{ get{ return strName } set(newStrName){ strName += newStrName } } } import Foundation var obj = CValue() obj.value = " oid" println("\(obj.strName)") 5.1 便捷set属性,可以使用默认的名字newValue写set属性而不用带括号 class CValue{ var strName:String = "xx" var value:String{ get{ return strName } set{ strName += newValue } } } 5.2只读计算属性。可以只通过get而不用set返回一个只读计算属性。 class CValue{ var strName:String = "xx" var value:String{ get{ return strName } } } import Foundation var obj = CValue() println("\(obj.strName)") 6:属性监视器。 可以为除了延迟存储属性之外的其他存储属性添加属性监视器,也可以通过重载属性的方式 ,为继承的属性(包括存储属性和计算属性)添加属性监视器 。计算属性因为有set实际上就是它的属性监视器了。使用willSet/didSet。 class CMonitor{ var strName:String = "" { willSet(newStrName){ println("willSet : \(newStrName)") } didSet(newStrName){ println("didSet:\(strName)") } } } import Foundation var monitor = CMonitor() monitor.strName = "sc"
|
请发表评论