Stored Property |
Computed Property |
---|---|
Class |
支持 |
Struct |
支持 |
enum |
不支持 |
Computed Property
本质就是方法(函数)
Stored Property(存储属性)
关于Stored Property
,Swift有明确规定:
在创建类 或 结构体 的实例时,必须为所有的Stored Property
设置一个合适的初始值
1.可以在初始化器里为存储属性设置一个初始值
struct Point {
var x : Int
var y : Int
init () {
x = 11
y = 22
}
}
2.可以分配一个默认的属性值作为属性定义的一部分
class Point {
var x : Int = 11
var y : Int = 22
}
延迟存储属性(Lazy Stored Property)注意点
当结构体包含一个延迟存储属性时,只有var才能访问延迟存储属性,
因为延迟属性初始化时需要改变结构体的内存
struct TestStruct {
lazy var age = 1
}
let ts = TestStruct()
ts.age
报错:Cannot use mutating getter on immutable value: 'ts' is a 'let' constant
正确的应该是把
let
更改为 var
struct TestStruct {
lazy var age = 1
}
var ts = TestStruct()
let a = ts.age
延迟存储属性(Lazy Stored Property)
先看非延迟的情况
class Car {
func run() {
}
}
class Person {
var car = Car()
}
let ref = Person()
struct SPerson {
var car = Car()
}
var val = SPerson()
//val.car.run()
print("变量的内存:", Mems.memStr(ofVal: &val))
打印结果为:
变量的内存: 0x0000000108904c60
再看延迟的情况,加lazy
class Car {
func run() {
}
}
class Person {
var car = Car()
}
let ref = Person()
struct SPerson {
lazy var car = Car()
}
var val = SPerson()
//val.car.run()
print("变量的内存:", Mems.memStr(ofVal: &val))
打印结果为:
变量的内存: 0x0000000000000000
当调用run方法后:
class Car {
func run() {
}
}
class Person {
var car = Car()
}
let ref = Person()
struct SPerson {
lazy var car = Car()
}
var val = SPerson()
val.car.run()
print("变量的内存:", Mems.memStr(ofVal: &val))
打印结果为:
变量的内存: 0x0000000108b61640
网友评论