Swift属性(Properties)

最后更新于:2022-04-01 14:34:14

属性关联特定的类、结构和枚举的值。存储的属性存储常量和变量的值作为实例的一部分。 下面以User类为大家介绍属性,先上全部类代码。 ~~~ class DataImporter { var fileName = "data.txt" init() { print("初始化") } } private class Users { // 有默认值的属性 var id = 0 // 只指定类型的属性,有可能存储nil var name:String? // 懒加载,只是使用的时候才会初始化 lazy var importer = DataImporter() // get、set var qqTemp:String = "" var qq:String { // 如果使用get和set则不能使用当前属性名赋值,以免死循环 // 获得 get { print("获得") return self.qqTemp } // 设置 set { print("传入值:\(newValue)") self.qqTemp = newValue } } // 只读,read-only var height: Int { return 180 } // 属性观察 var address:String = "" { willSet { print("新地址:\(newValue)") } didSet { print("旧地址:\(oldValue)") } } // 静态变量 static var storedTypeProperty = "Some value." } ~~~ ## 基础属性 在类和结构体中可以建立存储属性,可以是常量、变量或枚举。也可以为属性设置初始值或不设置初始值。 ~~~ private class Users { // 有默认值的属性 var id = 0 // 只指定类型的属性,有可能存储nil var name:String? } ~~~ 使用: ~~~ let user = Users() // 有初始值 print("\(user.id)") // 0 // 无初始值 print("\(user.name)") // nil ~~~ ## 懒加载属性 你可以给属性添加初始值,但是有的时候你添加的初始值是一个很大的对象,但你只希望使用它的时候才初始化。这就需要用到懒加载,懒加载属性就是当我们首次使用的时候才会创建并分配存储空间。懒加载的关键字是lazy。 ~~~ // 懒加载,只是使用的时候才会初始化 lazy var importer = DataImporter() class DataImporter { var fileName = "data.txt" init() { print("初始化") } } print("\(user.importer.fileName)") // 先输出"初始化",后输出"data.txt" ~~~ ## Getter和Setter 我们都知道点方法的实质是调用get和set方法,在swift中也有get和set方法。 ~~~ var qqTemp:String = "" var qq:String { // 如果使用get和set则不能使用当前属性名赋值,以免死循环 // 获得 get { print("获得") return self.qqTemp } // 设置 set { print("传入值:\(newValue)") self.qqTemp = newValue } } user.qq = "937447974" // 传入值:937447974 print("\(user.qq)") // 获得 937447974 ~~~ 如上所示,在属性中我们可以更加精确的控制get和set方法。在set中,newValue就是外部传入的值。 ## 只读属性 在swift中也支持属性只读,简单点就是只写get方法,不写set方法。但是swift考虑这种情况有更好的方式实现。 ~~~ // 只读,read-only var height: Int { return 180 } ~~~ ## 属性观察 有的时候,你可能想监听设置属性的操作,同时又想使用当前属性名。因为get和set中是不能使用当前属性名的,鉴于这种情况,swift提供了两种操作符: - willSet:设置前调用,newValue代表外部传入值; - didSet:设置后调用,didSet代码原始值。 ~~~ // 属性观察 var address:String = "" { willSet { print("新地址:\(newValue)") } didSet { print("旧地址:\(oldValue)") } } //属性观察 willSet将设置,didSet已设置 user.address = "北京" // 新地址:北京 旧地址: user.address = "天安门" // 新地址:天安门 旧地址:北京 ~~~ ## 静态变量 在swift中也支持静态变量static,使用静态变量只需要使用类名。 ~~~ // 静态变量 static var storedTypeProperty = "Some value." // 静态变量 Users.storedTypeProperty = "static" print("\(Users.storedTypeProperty)") // static ~~~ ## 其他 ### 参考资料 [The Swift Programming Language (Swift 2.1)](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html) ### 文档修改记录 | 时间 | 描述 | |-----|-----| | 2015-10-29 | 根据 [The Swift Programming Language (Swift 2.1)](https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Language/ErrorHandling.html)中的Classes and Structures总结 | 版权所有:[http://blog.csdn.net/y550918116j](http://blog.csdn.net/y550918116j)
';