Swift 中的结构体与类:深入理解与选择指南

Swift 中的结构体与类:深入理解与选择指南

swift-book The Swift Programming Language book swift-book 项目地址: https://gitcode.com/gh_mirrors/sw/swift-book

概述

在 Swift 编程语言中,结构体(struct)和类(class)是构建代码的基础模块,它们允许开发者创建自定义类型来封装数据和行为。虽然两者在功能上有许多相似之处,但在底层实现和使用场景上存在关键差异。

结构体与类的共同点

Swift 中的结构体和类都支持以下功能:

  • 属性存储:可以定义变量或常量属性来存储值
  • 方法实现:能够添加功能性的方法
  • 下标访问:支持使用下标语法访问值
  • 初始化器:可以定义初始化方法来设置初始状态
  • 扩展性:可以通过扩展来增加功能
  • 协议遵循:能够遵循协议来实现标准功能

类的独有特性

类相比结构体具有以下额外能力:

  1. 继承:支持单继承,一个类可以继承另一个类的特性
  2. 类型转换:支持运行时类型检查和转换
  3. 析构器:实例销毁时可以执行清理操作
  4. 引用计数:支持多个引用指向同一个实例

定义语法对比

结构体和类的定义语法非常相似:

// 结构体定义
struct Resolution {
    var width = 0
    var height = 0
}

// 类定义
class VideoMode {
    var resolution = Resolution()
    var interlaced = false
    var frameRate = 0.0
    var name: String?
}

Swift 的类型命名采用大驼峰式(UpperCamelCase),属性和方法采用小驼峰式(lowerCamelCase)。

实例创建与属性访问

创建实例的语法相同:

let someResolution = Resolution()
let someVideoMode = VideoMode()

使用点语法访问属性:

print(someResolution.width)  // 访问属性
someVideoMode.resolution.width = 1280  // 修改属性

结构体的成员初始化器

结构体自动获得成员初始化器:

let vga = Resolution(width: 640, height: 480)

而类不会自动获得这种初始化器。

值类型 vs 引用类型

结构体是值类型

值类型在赋值或传递时会被复制。Swift 中的基本类型(Int, Double, Bool等)、字符串、数组、字典和枚举都是值类型。

let hd = Resolution(width: 1920, height: 1080)
var cinema = hd  // 这里会创建hd的副本
cinema.width = 2048  // 只修改cinema的副本

print(hd.width)      // 1920 (原值不变)
print(cinema.width)  // 2048

类是引用类型

引用类型在赋值或传递时不会复制实例,而是共享同一个实例的引用。

let tenEighty = VideoMode()
tenEighty.resolution = hd
tenEighty.interlaced = true

let alsoTenEighty = tenEighty  // 引用同一个实例
alsoTenEighty.frameRate = 30.0

print(tenEighty.frameRate)      // 30.0
print(alsoTenEighty.frameRate)  // 30.0 (两者相同)

恒等运算符

对于引用类型,可以使用恒等运算符判断是否引用同一个实例:

  • === 判断两个引用是否指向同一个实例
  • !== 判断两个引用是否指向不同实例

选择建议

在实际开发中,建议遵循以下原则:

  1. 优先使用结构体:结构体更简单、更安全,适用于大多数场景
  2. 需要继承时使用类:当需要继承或需要引用语义时才使用类
  3. 考虑性能:对于大型数据结构,引用类型可能更高效
  4. 线程安全:值类型在多线程环境下更安全

总结

Swift 中的结构体和类各有优势,理解它们的区别对于编写高效、安全的代码至关重要。值类型提供更简单的行为模型,而引用类型则提供了更灵活的对象关系。在实际开发中,应根据具体需求选择最合适的类型。

swift-book The Swift Programming Language book swift-book 项目地址: https://gitcode.com/gh_mirrors/sw/swift-book

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

班珺傲

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值