您的位置:首页 > 移动开发 > Swift

Swift属性(Properties)

2015-10-29 15:23 393 查看
属性关联特定的类、结构和枚举的值。存储的属性存储常量和变量的值作为实例的一部分。

下面以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总结
版权所有:http://blog.csdn.net/y550918116j
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: