存储属性
- <类 枚举 结构体> 的常量或变量(有具体存储空间)
// 一般形式
let name = "panda"
var eat: String
var live: String = "chengdu" {
willSet {
}
didSet {
}
}
// 懒加载
lazy var obj = NSObject()
lazy var objfun: NSObject = { // 这里实现很像计算属性,但尾随闭包返回了一个 有存储空间的对象,对于该对象是存储属性
let obj = NSObject()
return obj
}()
计算属性
// 如下 可以实现只读属性(get值恒不变,set值无效)
var name: String { // name是两个函数(set get)
get {
return "panda"
}
set {
print(newValue)
}
}
var name: String { // get only
return "panda"
}
// 但将set get作用在一个存储属性上,就成了属性的快速get set方法了
// 子类重写父类属性
// father
var name: String = "dog"
// child
override var name: String {
set {}
get {
return "cat"
}
}
类属性
- <类 枚举 结构体> 有初始值的存储属性 static修饰(很像全局)
// 存储属性 (一定要有初始值, 因为没办法在初始化时赋值)
// (延迟初始化,多线程也只会创建一次<用于单列实现>)
static var name: String = "dog"
全局和局部 变常量
域: <函数,结构(类 结构体 枚举)> 外 -> 全局, 内 -> 局部
存储属性
- 全局变常量都是延迟加载(不使用lazy)
- 局部变常量想延迟加载需要使用lazy修饰
计算属性