当前位置: 首页 > news >正文

HoRain云--Swift结构体全解析:高效编程必备

🎬 HoRain 云小助手:个人主页

⛺️生活的理想,就是为了理想的生活!


⛳️ 推荐

前些天发现了一个超棒的服务器购买网站,性价比超高,大内存超划算!忍不住分享一下给大家。点击跳转到网站。

目录

⛳️ 推荐

Swift 结构体(Struct)

一、结构体的基本定义

1. 基本语法

2. 示例:定义一个简单的结构体

二、结构体的核心特性

1. 值类型特性

2. 成员逐一初始化器

3. 可变方法(mutating methods)

三、结构体的高级特性

1. 属性观察器

2. 静态属性和方法

3. 扩展(Extensions)

4. 协议遵循

四、结构体 vs 类

五、何时使用结构体

六、实际应用示例

1. 几何形状

2. 数据模型

3. 配置选项

七、最佳实践


Swift 结构体(Struct)

Swift 结构体是一种值类型的复合数据类型,用于将多个相关属性组合成一个单一的实体。与类(class)不同,结构体是值类型,在赋值或传递时会进行拷贝而非引用。

一、结构体的基本定义

1. 基本语法

struct 结构体名称 { // 属性 var 属性1: 类型 let 属性2: 类型 // 方法 func 方法名() { // 方法实现 } // 初始化器 init(参数) { // 初始化代码 } }

2. 示例:定义一个简单的结构体

struct Person { var name: String var age: Int let gender: String // 方法 func description() -> String { return "\(name) is \(age) years old, gender: \(gender)" } // 初始化器 init(name: String, age: Int, gender: String) { self.name = name self.age = age self.gender = gender } }

二、结构体的核心特性

1. 值类型特性

var person1 = Person(name: "John", age: 25, gender: "Male") var person2 = person1 // 创建 person1 的拷贝 person2.name = "Jane" print(person1.name) // 输出: John (person1 不受影响) print(person2.name) // 输出: Jane

2. 成员逐一初始化器

Swift 为结构体自动生成成员逐一初始化器:

struct Point { var x: Double var y: Double } // Swift 自动生成的初始化器 let point1 = Point(x: 10.0, y: 20.0)

3. 可变方法(mutating methods)

由于结构体是值类型,要修改其属性的方法必须标记为mutating

struct Rectangle { var width: Double var height: Double mutating func scale(by factor: Double) { width *= factor height *= factor } } var rect = Rectangle(width: 10.0, height: 5.0) rect.scale(by: 2.0) // rect 现在是 width: 20.0, height: 10.0

三、结构体的高级特性

1. 属性观察器

struct Temperature { var celsius: Double { didSet { print("Temperature changed from \(oldValue)°C to \(celsius)°C") } willSet { print("Temperature will change from \(celsius)°C to \(newValue)°C") } } }

2. 静态属性和方法

struct MathConstants { static let pi = 3.14159265359 static let e = 2.71828182846 static func square(_ number: Double) -> Double { return number * number } } print(MathConstants.pi) // 3.14159265359 print(MathConstants.square(5)) // 25.0

3. 扩展(Extensions)

extension Person { func isAdult() -> Bool { return age >= 18 } static func createDefault() -> Person { return Person(name: "Unknown", age: 0, gender: "Unknown") } }

4. 协议遵循

protocol Describable { func getDescription() -> String } struct Book: Describable { var title: String var author: String func getDescription() -> String { return "\(title) by \(author)" } }

四、结构体 vs 类

特性结构体
类型值类型引用类型
内存管理栈分配堆分配
继承不支持支持
析构器不支持支持deinit
引用计数有 ARC
mutating 方法需要mutating关键字不需要
性能通常更快通常较慢

五、何时使用结构体

推荐使用结构体的场景:

推荐使用类的场景:

六、实际应用示例

1. 几何形状

struct Circle { var center: (x: Double, y: Double) var radius: Double var area: Double { return MathConstants.pi * radius * radius } var circumference: Double { return 2 * MathConstants.pi * radius } } let circle = Circle(center: (10, 10), radius: 5) print("Area: \(circle.area)") // Area: 78.53981633974483

2. 数据模型

struct User { var id: UUID var username: String var email: String var isActive: Bool = true private var lastLogin: Date? init(username: String, email: String) { self.id = UUID() self.username = username self.email = email } mutating func login() { lastLogin = Date() isActive = true } func getLastLoginString() -> String { guard let lastLogin = lastLogin else { return "Never logged in" } let formatter = DateFormatter() formatter.dateStyle = .medium formatter.timeStyle = .short return formatter.string(from: lastLogin) } }

3. 配置选项

struct AppSettings { static let shared = AppSettings() let maxItemsPerPage: Int = 20 let defaultTheme: String = "light" var notificationEnabled: Bool = true private init() {} } // 使用 print(AppSettings.shared.maxItemsPerPage) // 20

七、最佳实践

  1. 优先使用结构体:除非需要类的特性,否则优先选择结构体
  2. 保持简单:结构体应该保持职责单一,避免过度复杂
  3. 使用扩展:将相关功能通过扩展组织,保持结构体定义简洁
  4. 注意性能:大型结构体的拷贝可能影响性能,需要权衡
  5. 合理使用属性观察器:避免在didSet中执行耗时操作
  6. 提供良好的初始化器:根据使用场景提供合适的初始化方法

Swift 结构体是强大的工具,结合协议、扩展等特性,可以创建出既高效又灵活的代码结构。理解结构体的值类型特性和适用场景,是编写高质量 Swift 代码的关键。

❤️❤️❤️本人水平有限,如有纰漏,欢迎各位大佬评论批评指正!😄😄😄

💘💘💘如果觉得这篇文对你有帮助的话,也请给个点赞、收藏下吧,非常感谢!👍 👍 👍

🔥🔥🔥Stay Hungry Stay Foolish 道阻且长,行则将至,让我们一起加油吧!🌙🌙🌙

http://www.jsqmd.com/news/613091/

相关文章:

  • 如何高效下载Steam创意工坊模组?WorkshopDL完整使用指南
  • 从Cortex-A7到A53,手把手教你评估RV1126B升级到RV1126B-P的硬件改动清单
  • 如何突破Cursor Pro功能限制:完整解决方案
  • STM32晶振配置错误引发芯片锁死:从BOOT模式到恢复的全流程解析
  • 2026杭州门窗医院选型指南:满足这3个硬指标才算靠谱 - 精选优质企业推荐榜
  • 2026最有效祛疤产品分享:剖腹产除疤膏有哪些品牌?疤痕增生修复优先olioli - 资讯焦点
  • Coze个人教务自动化工作流开发实战详解
  • 7-Zip ZS:新一代压缩工具的全方位应用指南
  • 易能医药3.1类新药经典名方苓桂术甘汤颗粒获批上市 - 资讯焦点
  • 如何利用Browsershot实现企业级网页内容转换与自动化处理
  • 突破抖音内容采集瓶颈:开源工具如何实现高效批量下载
  • 2026杭州隔音门窗环保选型指南:满足这3个硬指标才算靠谱 - 精选优质企业推荐榜
  • 电赛小车硬件选型与实战指南(蓝牙遥控与循迹模块深度解析)
  • 最新付费进群系统源码 V4.1全开源版本源码 附教程
  • 简单三步:用Win11Debloat一键清理Windows系统,让你的电脑运行速度提升50%
  • 基于开源3D眼动追踪与YOLO的疲劳监测系统:从硬件搭建到代码实现
  • KIHU快狐|24寸落地广告机RK3288十核500亮度培训机构设备
  • ComfyUI 离线部署 ControlNet 预处理器:模型文件下载与路径配置全攻略
  • 韶关隐形车衣品牌众多,哪家口碑好且价格合适 - 工业品网
  • Kazumi开源番剧播放器技术指南
  • 2026临平隔音门窗生产厂家选型指南:满足这3个硬指标才算靠谱 - 精选优质企业推荐榜
  • 5步掌握原神辅助工具:如何用开源工具提升游戏效率?
  • 最新多模式防红系统源码+对接易支付
  • 别再数据线了!用FastAPI 分钟搭个局域网文件+剪贴板神器伊
  • 百度网盘提速工具:突破下载限制实现70倍速度提升方案
  • 敏感肌也能放心用的美白面霜|HNF珍白光透亮面霜实测+4款大牌面霜适配指南 - 资讯焦点
  • 【考研 408】进程管理进阶篇(真题解析 + 易错突破 + 综合题型实战)
  • 英雄联盟智能助手ChampR:快速提升游戏水平的终极指南
  • 解锁嵌入式视觉开发:ESP32-OpenCV实现低功耗边缘计算方案
  • VCF 私有 AI 服务(PAIS)自签名 TLS 证书配置避坑指南