Swift属性(Properties)
2015-10-29 15:23
393 查看
属性关联特定的类、结构和枚举的值。存储的属性存储常量和变量的值作为实例的一部分。
下面以User类为大家介绍属性,先上全部类代码。
使用:
如上所示,在属性中我们可以更加精确的控制get和set方法。在set中,newValue就是外部传入的值。
willSet:设置前调用,newValue代表外部传入值;
didSet:设置后调用,didSet代码原始值。
版权所有:http://blog.csdn.net/y550918116j
下面以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)文档修改记录
时间 | 描述 |
---|---|
2015-10-29 | 根据 The Swift Programming Language (Swift 2.1)中的Classes and Structures总结 |
相关文章推荐
- Swift开发记录 - 升级Xcode7&iOS9带来的问题
- Swift(一、基本入门)
- swift 快速奔跑的兔几 本节的内容是:序列化与反序列化
- swift算法实践(3)-KMP算法字符串匹配
- Swift开发记录 - UIApplication不存在的问题
- Swift类和结构体(Classes and Structures)
- SWIFT——增加和删除数组元素
- SWIFT——枚举数组元素的方法
- owncloud配置swift外接存储
- SWIFT——数组的创建和初始化
- Swift Cheat Sheet [2] - Control Flow
- Swift Cheat Sheet [1] — Basic Types
- 3、Swift变量、常量、函数、类以及扩展类的使用
- Swift下单例模式
- 2、Swift出现Missing argument label 'XX:'in call 错误的解决方法
- 1、创建第一个swift程序(系统是OS X 10.11,工具是Xcode7.1)
- swift 的循环
- swift基本类型
- swift 关于 toolbar 学习笔记
- Swift解析:将推动应用开发巨变