为了账号安全,请及时绑定邮箱和手机立即绑定

Swift中的结构体、类和Actor有何不同:通俗解析

标签:
Swift

#为iOS模拟面试练习找我 在领英上联系我 :Shobhakar 领英主页

在这份指南中,我们将探讨这些数据类型,突出它们之间的差异,并提供实用示例。为了让大家觉得有趣,让我们通过由 iOS 培训讲师 Shobhakar Tiwari 主持的模拟课程来学习,他会用实际例子来演示这些概念。

注意:此图取自网址:<https://www.linkedin.com/pulse/当使用 structs、classes 和 actors 时-swift-5 实际场景-haviv-tk1de/>,该图以及领英博客提供了对此内容的更多见解和信息。

基于知识的了解

在探讨差异之前,让我们先定义每个:

  • Struct: 结构体,一种值类型,在赋值或传递时会被复制。最适合简单不可变的对象。
  • 类(Class):一种引用类型,使用指针并支持继承。更适合复杂可变的对象。
  • Actor:一种引用类型,专为并发环境中的线程安全操作设计。

实用的例子:

1. 使用 Struct:简洁轻便

结构体是值类型,非常适合用于表示简单的模型。例如,iOS 培训师 Shobhakar Tiwari 定义了一个名为 Student 的结构体。

    struct 学生 {  
        var 名字: String  
        var 年龄: Int  
    }  

    var 学生 = 学生(名字: "Peeyush", 年龄: 20)  
    var 学生2 = 学生  

    学生2.名字 改为 "Sumit"  

    // 原来的实例没有改变  
    print(学生.名字) // 打印: Peeyush  
    print(学生2.名字) // 打印: Sumit

在上面的例子中,对 student2 的改动不会影响 student1,因为每个结构体实例都是独立存在的。

2. 使用类:复杂类:

由于类是引用类型,可以实现多个实例之间的数据共享。Shobhakar 创建了一个模拟的 Trainer 类实例。

    class Trainer {  
        var name: String  
        var expertise: String  

        init(name: String, expertise: String) {  
            self.name = name  
            self.expertise = expertise  
        }  
    }  

    let trainer1 = Trainer(name: "Shobhakar Tiwari", expertise: "iOS开发")  
    let trainer2 = trainer1  

    trainer2.name = "John"  

    // 两个实例都会显示这个变化  
    print(trainer1.name) // 显示: John  
    print(trainer2.name) // 显示: John

在这里,修改 trainer2 也会让 trainer1 更新,因为它们指向同一个内存地址。

3. 使用 Actor 模型实现线程安全的并发程序设计

线程是一种引用类型,设计用于安全处理并发。让我们举一个例子,其中 Shobhakar 正在管理培训班上学生的出勤。

    类 AttendanceManager {  
        private var attendees: [String] = []  

        func 记录出席(student: String) {  
            attendees.append(student)  
        }  

        func 获取参会者列表() -> [String] {  
            return attendees  
        }  
    }  

    let attendanceManager = AttendanceManager()  

    Task {  
        await attendanceManager.记录出席(student: "Peeyush")  
        await attendanceManager.记录出席(student: "Sumit")  
        print(await attendanceManager.获取参会者列表()) // 输出: ["Peeyush", "Sumit"]  
    }

在本例中,AttendanceManager 确保了对 attendees 数组的所有操作都是线程安全的,即使在多线程环境中也一样。

瑞典语翻译应改为:“什么时候该用哪个?”

选择 Struct、Class 和 Actor 的依据是具体需求。

  • 当你需要轻量级、不可变且独立的对象,比如数据模型或配置时,使用Struct。
  • 当你需要具有共享数据或继承特性的引用对象时,使用Class。
  • 当你需要线程安全的并发数据处理(例如在Swift中的并发处理中管理共享资源或状态)时,使用Actor(Swift中的并发处理模型)。
结论部分

Swift 的 Struct、Class 和 Actor 可以帮助你设计更灵活、更稳健的应用。每一种都有其独特的用途,选择哪一种则取决于你的项目需求。理解这些差异将帮助你编写更干净、更高效且更易于扩展的代码。

所以,下次你在编写 iOS 应用时,想想 Shobhakar Tiwari 的智慧之言——选择合适的数据类型,让代码更出色,让你的代码像 Swift 大会聚光灯一样耀眼,就像模拟类的智慧一样。

iOS #swift #SwiftUI #编程 #准备 #面试
栈学 🎓

感谢您一直读到最后。在您离开之前,

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消