Swift Property

2021-07-01  本文已影响0人  搬码小能手
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

image.png
正确的应该是把 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
上一篇下一篇

猜你喜欢

热点阅读