langShift

类和结构体 - 面向对象编程、属性和方法

学习 Swift 类和结构体:面向对象编程基础、属性、方法、构造函数,与 JavaScript 对比

类和结构体:面向对象编程、属性和方法

在本模块中,我们将探索 Swift 中的面向对象编程(OOP),并与 JavaScript 的类和原型系统进行对比。Swift 提供了类(引用类型)和结构体(值类型),每种都有其特定的用例和特性。

目录

介绍:类与结构体

  • :引用类型,支持继承、析构器、身份比较、引用语义。
  • 结构体:值类型,不支持继承,赋值时复制,值语义,轻量级,适合简单数据模型。
特性JavaScript 类Swift 类Swift 结构体
引用类型
值类型
继承
析构器
可变性动态受控受控
协议否(接口)
使用场景所有 OOPOOP数据模型、轻量级类型

声明类和结构体

正在加载...

属性

Swift 支持存储属性、计算属性和属性观察器。JavaScript 的属性总是动态的。

正在加载...

方法

JavaScript 和 Swift 都支持实例方法。Swift 还支持静态/类方法和结构体的可变方法。

正在加载...

初始化器(构造函数)

Swift 使用 init 作为初始化器。结构体默认获得成员初始化器。

正在加载...

继承和多态

Swift 类支持单继承,而 JavaScript 类也支持单继承,但可以使用混入和组合。

基本继承

正在加载...

多态

正在加载...

值类型与引用类型

这是 Swift 和 JavaScript 之间的根本差异。

引用类型(类)

正在加载...

值类型(结构体)

正在加载...

协议(接口)

Swift 协议类似于 JavaScript 接口,但功能更强大。

正在加载...

高级特性

属性包装器和计算属性

正在加载...

静态和类方法

正在加载...

练习题

练习 1:创建学生管理系统

正在加载...

练习 2:实现形状层次结构

正在加载...

关键要点

Swift OOP 优势

  1. 值类型:结构体提供值语义,防止意外突变
  2. 类型安全:强类型防止运行时错误
  3. 协议:类和结构体的灵活接口系统
  4. 属性观察器:内置的属性变化通知支持
  5. 内存管理:ARC 自动处理内存

与 JavaScript 的关键差异

  1. 值 vs 引用:Swift 区分值类型和引用类型
  2. 继承:只有 Swift 类支持继承
  3. 可变性:Swift 结构体需要显式的可变方法
  4. 协议:Swift 有正式的协议系统 vs JavaScript 鸭子类型
  5. 内存管理:ARC vs 垃圾回收

最佳实践

  1. 对简单数据模型使用结构体和值语义
  2. 对需要继承的复杂对象使用类
  3. 利用协议实现灵活接口
  4. 尽可能优先使用组合而非继承
  5. 使用属性观察器进行响应式编程
  6. 考虑值类型的线程安全性和性能

下一步

在下一个模块中,我们将探索 Swift 中的协议和扩展,包括协议导向编程、协议扩展,以及它们与 JavaScript 接口和混入方法的对比。