swift-08-属性、汇编分析inout本质

一、Swift中跟实例相关的属性可以分为2大类

1.1 存储属性( Stored Property)

类似于成员变量这个概念

存储在实例的内存中

结构体、类可以定义存储属性

枚举不可以定义存储属性(因为枚举只存储关联值和case)

1.2 计算属性( Computed Property)

本质就是方法(函数)

不占用实例的内存

枚举、结构体、类都可以定义计算属性

|-------------------------------------------|
| print(MemoryLayout<Circle>.stride) // 8 |

Swift 复制代码
struct Circle {
// 存储属性
var radius: Double
// 计算属性
var diameter: Double {
set {
radius = newValue / 2
}
get {
radius * 2
 }
  }
}

var circle = Circle(radius: 5)
print(circle.radius) // 5.0
print(circle.diameter) // 10.0

circle.diameter = 12
print(circle.radius) // 6.0
print(circle.diameter) // 12.0

二、存储属性

关于存储属性,Swift有个明确的规定

在创建类 或 结构体的实例时,必须为所有的存储属性设置一个合适的初始值

可以在初始化器里为存储属性设置一个初始值

可以分配一个默认的属性值作为属性定义的一部分

三、计算属性

如果这个属性可以通过宁一个属性计算出来就设计为计算属性

有set 必须有get

四、枚举 rawValue 原理

枚举原始值rawValue的本质是:只读计算属性

Swift 复制代码
enum TestEnum : Int {
case test1 = 1, test2 = 2, test3 = 3
var rawValue: Int {
switch self {
case .test1:
return 10
case .test2:
return 11
case .test3:
return 12
}
}
}

print(TestEnum.test3.rawValue) // 12

五、延迟存储属性( Lazy Stored Property

Swift 复制代码
class PhotoView {
lazy var image: Image = {
let url = "https://www.520it.com/xx.png"
let data = Data(url: url)
return Image(data: data)
}() 调用闭包
}

六、延迟存储属性注意点

七、属性观察器(Property Observer )

八、全局变量、局部变量

九、inout的再次详细研究 1.22 输入输出参数本质就是引用传递

十、类型属性( Type Property)

十一、类型属性细节

相关推荐
Yyyyyy~8 分钟前
【java】类和对象
java·开发语言
草莓熊Lotso20 分钟前
【Redis 进阶】主从复制深度解析:从配置落地到 PSYNC 同步原理
linux·开发语言·网络·数据库·redis·缓存·php
Joy T36 分钟前
Spring AI 2.0 进阶入门:Workflow、Routing、Task State 与可控 Agent
开发语言·人工智能·workflow·routing·springai·orchestrator·evaluator
重生之小比特39 分钟前
【Java SE】抽象类和接口
java·开发语言
传奇开心果编程40 分钟前
【Rust入门知识点学与练】第33课:异步编程入门(async/await)强化
开发语言·学习·rust
传奇开心果编程1 小时前
【Rust入门知识点学与练】第34课:所有权与借用
开发语言·学习·rust
529宝宝起名网2 小时前
用 Python 开发历史名字查询与起名灵感工具:从古籍人物数据库到名字文化故事生成
开发语言·前端·python
ocean21032 小时前
2025-2026年C++专题大厂面试高频问题
开发语言·c++·面试
白远山2 小时前
健身场馆无人自动化系统实战指南:从架构设计到部署全流程解析
java·开发语言·架构·需求分析
郝学胜-神的一滴2 小时前
C++20模板元编程 02:吃透模板基础核心四大核心知识点
开发语言·数据结构·c++·程序人生·软件工程·visual studio