类和结构体 - 面向对象编程、属性和方法
学习 Swift 类和结构体:面向对象编程基础、属性、方法、构造函数,与 JavaScript 对比
类和结构体:面向对象编程、属性和方法
在本模块中,我们将探索 Swift 中的面向对象编程(OOP),并与 JavaScript 的类和原型系统进行对比。Swift 提供了类(引用类型)和结构体(值类型),每种都有其特定的用例和特性。
目录
介绍:类与结构体
- 类:引用类型,支持继承、析构器、身份比较、引用语义。
- 结构体:值类型,不支持继承,赋值时复制,值语义,轻量级,适合简单数据模型。
特性 | JavaScript 类 | Swift 类 | Swift 结构体 |
---|---|---|---|
引用类型 | 是 | 是 | 否 |
值类型 | 否 | 否 | 是 |
继承 | 是 | 是 | 否 |
析构器 | 否 | 是 | 否 |
可变性 | 动态 | 受控 | 受控 |
协议 | 否(接口) | 是 | 是 |
使用场景 | 所有 OOP | OOP | 数据模型、轻量级类型 |
声明类和结构体
正在加载...
属性
Swift 支持存储属性、计算属性和属性观察器。JavaScript 的属性总是动态的。
正在加载...
方法
JavaScript 和 Swift 都支持实例方法。Swift 还支持静态/类方法和结构体的可变方法。
正在加载...
初始化器(构造函数)
Swift 使用 init
作为初始化器。结构体默认获得成员初始化器。
正在加载...
继承和多态
Swift 类支持单继承,而 JavaScript 类也支持单继承,但可以使用混入和组合。
基本继承
正在加载...
多态
正在加载...
值类型与引用类型
这是 Swift 和 JavaScript 之间的根本差异。
引用类型(类)
正在加载...
值类型(结构体)
正在加载...
协议(接口)
Swift 协议类似于 JavaScript 接口,但功能更强大。
正在加载...
高级特性
属性包装器和计算属性
正在加载...
静态和类方法
正在加载...
练习题
练习 1:创建学生管理系统
正在加载...
练习 2:实现形状层次结构
正在加载...
关键要点
Swift OOP 优势
- 值类型:结构体提供值语义,防止意外突变
- 类型安全:强类型防止运行时错误
- 协议:类和结构体的灵活接口系统
- 属性观察器:内置的属性变化通知支持
- 内存管理:ARC 自动处理内存
与 JavaScript 的关键差异
- 值 vs 引用:Swift 区分值类型和引用类型
- 继承:只有 Swift 类支持继承
- 可变性:Swift 结构体需要显式的可变方法
- 协议:Swift 有正式的协议系统 vs JavaScript 鸭子类型
- 内存管理:ARC vs 垃圾回收
最佳实践
- 对简单数据模型使用结构体和值语义
- 对需要继承的复杂对象使用类
- 利用协议实现灵活接口
- 尽可能优先使用组合而非继承
- 使用属性观察器进行响应式编程
- 考虑值类型的线程安全性和性能
下一步
在下一个模块中,我们将探索 Swift 中的协议和扩展,包括协议导向编程、协议扩展,以及它们与 JavaScript 接口和混入方法的对比。