`

《从零开始学Swift》学习笔记(Day 30)——选择类还是结构体呢?

阅读更多

原创文章,欢迎转载。转载请注明:关东升的博客

 

类和结构体非常相似,很多情况下没有区别。如果你是设计人员在进行系统设计时候,是将某种类型设计成为类还是结构体? 

类和结构体异同:

类和结构体都有如下功能:

  • 定义存储属性
  • 定义方法
  • 定义下标
  • 定义构造函数
  • 定义扩展
  • 实现协议 

只有类才有的功能:

  • 能够继承另外一个类
  • 能够核对运行期对象的类型
  • 析构对象释放资源
  • 引用计数允许一个实例有多个引用 

选择的原则:

结构体是值类型,每一个实例没有独一无二的标识,下面两个数组实例本质上没有区别,他们可以互相替换。

var studentList1: [String]  = ["张三","李四","王五"]
var studentList2: [String]  = ["张三","李四","王五"]

 

但是我们提到类时候,它是引用类型,每个实例都有独一无二的标识。我们看看下面员工Employee类代码:

class Employee {
    var no   = 0      
    var name = "" 
    var job = ""  
    var salary = 0.0
}
 
var emp1  =  Employee()
emp1.no = 100
emp1.name = "Tom"
emp1.job = "SALES"
emp1.salary = 9000
 
var emp2  =  Employee()
emp2.no = 100
emp2.name = "Tom"
emp2.job = "SALES"
emp2.salary = 9000

 

emp1emp2两个员工实例即便内容完全相同,但是这不能说明他们就是同一个员工,只是相似而已。每一个员工实例的背后都有独一无二的标识。

我们再来看看部门Department结构体。

struct Department {
    var no: Int = 0
    var name: String = ""
}
 
var dept1 = Department()
dept1.no = 20
dept1.name = "Research"
 
var dept2 = Department()
dept2.no = 20
dept2.name = "Research"

 

Department为什么被设计成为结构体而不是类呢,那要看我们对于两个不同部门的理解是什么,如果具有相同的部门编号(no)和部门名称(name),我们就认为他们是两个相同的部门,那么就可以把Department定义为结构体,这一点与员工Employee不同。

 

 

  • 大小: 21.1 KB
分享到:
评论

相关推荐

    C语言学习——结构体

    【C语言学习——结构体】 在C语言中,结构体是一种复合数据类型,它允许我们将不同类型的数据组合到一个单一的实体中,便于管理和操作。结构体的概念是C语言中非常重要的一个部分,它解决了在单一变量中存储多个...

    C语言笔记——结构体.docx

    C语言笔记——结构体 结构体是C语言中的一种复杂数据类型,用于存储多个类型不同的数据。结构体的概念是为了解决数组的局限性,能够存储多个类型不同的数据。 结构体的定义形式为:struct 结构体名 {类型 成员变量...

    详解Swift语言中的类与结构体

    在Swift编程语言中,类(Class)和结构体(Structure)是两种主要的数据类型,用于组织和封装数据以及相关的操作。它们都是复合类型,可以包含属性(Properties)、方法(Methods)、下标(Subscripts)以及初始化器...

    Swift 中的类和结构体:深入理解与应用

    在 Swift 编程语言中,类(Class)和结构体(Structure)是两种用于创建自定义数据类型的核心构造。尽管它们在功能上有许多相似之处,但它们之间也存在一些关键的区别,这些区别影响着开发者在不同场景下的选择。...

    swift菜鸟入门视频教程-09-类和结构体

    在选择使用类还是结构体时,应考虑以下几个因素: - 如果你需要的是一个拥有复杂生命周期的对象,或者需要继承和多态,那么应该选择类。 - 如果数据的复制行为很重要,或者希望避免引用带来的问题,那么结构体可能是...

    [源代码]再探C#类与结构体究竟谁快

    "再探C#类与结构体究竟谁快——考虑栈变量、栈分配、64位整数、密封类.txt"很可能包含了详细的文章内容,分析了这些因素对类和结构体性能的影响。"TryPointerCall2005"和"TryPointerCall2010"可能是用于测试和比较类...

    [源代码]C#类与结构体究竟谁快

    [源代码]C#类与结构体究竟谁快——各种函数调用模式速度评测 详见—— http://blog.csdn.net/zyl910/article/details/6788417 C#类与结构体究竟谁快——各种函数调用模式速度评测

    Swift快速学习笔记

    这篇快速学习笔记将带你深入理解Swift的基础概念,包括类的继承、扩展和泛型、类与结构体、协议、数据结构和控制流以及自动引用计数(ARC)。 首先,我们来看“SwiftStudyPlayground类的继承.playground”。在Swift...

    Go 学习笔记——雨痕

    Go语言,又称Golang,是一种静态类型的编程语言,由Google开发,于2007年首次对外公布,并在2009年进行了...通过本学习笔记的内容,我们可以对Go语言有一个全面而系统的认识,为深入学习和应用Go语言打下坚实的基础。

    iOS开发 swift语言入门 学习资料

    从Apple官方的“Swift Playgrounds”应用到各种在线教程和书籍,如《Swift编程语言》(The Swift Programming Language)官方指南,都提供了详细的学习路径。通过这些资源,你可以逐步了解并掌握变量与常量、控制流...

    IOS开发-Swift-基础知识学习笔记

    本学习笔记将深入探讨Swift的基础知识,帮助初学者快速掌握这一强大的工具。 一、Swift简介 Swift是由Apple在2014年WWDC(全球开发者大会)上推出的,旨在提高开发效率和代码安全。它吸收了Objective-C的优点,同时...

    swift学习笔记

    这篇学习笔记主要涵盖了Swift的基础知识和关键特性,旨在帮助初学者理解并掌握这种现代、强大且易读的语言。 一、Swift语言基础 Swift的语法简洁明了,易于理解。它引入了类型推断,使得编写代码时可以减少冗余的...

    [测试程序exe]C#类与结构体究竟谁快

    [测试程序exe]C#类与结构体究竟谁快——各种函数调用模式速度评测 详见—— http://blog.csdn.net/zyl910/article/details/6788417 C#类与结构体究竟谁快——各种函数调用模式速度评测

    从零开始学ida2.pdf

    根据提供的文档内容,我们可以了解到这是一份关于逆向工程学习的中篇教程,主要以IDA(Interactive Disassembler)工具为焦点,覆盖了从基础的Windbg安装配置到高级的驱动逆向分析和利用技术。 首先,文档开篇介绍...

    c语言函数和结构体共同实现天数

    在C语言中,结构体(struct)是一种复合数据类型,它允许我们将多个不同类型的变量组合成一个单一的实体。在给定的代码示例中,`y_m_d` 结构体用于存储日期,包含三个整型成员:year、month 和 day。这使得我们可以...

    c语言结构体学习笔记.

    ### C语言结构体学习笔记 #### 一、结构体的基础概念与定义 ##### 1.1 结构体的自述 - **结构体定义**:结构体(struct)是C语言中的一种复合数据类型,用于组织不同类型的数据作为一个整体,以便更好地管理和操作...

    结构体在matlab中的应用

    MATLAB 结构体应用详解 MATLAB 中的结构体是一种复杂数据类型,用于存储非uniform 的数据。结构体由字段和对应的值组成,每个字段可以是不同的数据类型。MATLAB 提供了两种定义结构的方式:直接应用和使用 struct ...

    大家一起学Golang——结构体、方法

    大家一起学Golang——结构体、方法 结构体类型 空结构体 结构体标签 匿名字段 方法 重写 结构体类型 结构体类型通过一系列的且唯一的字段来声明。在go中数组切片只能存储同一类型的数据,但结构体用户可以自定义将...

    Swift语言教程:Swift 结构体教程

    ### Swift 结构体教程 #### 一、Swift 结构体简介 Swift 结构体是一种非常重要的数据类型,它提供了一种灵活的方式来组织相关的值。与类不同,结构体是值类型,这意味着每次传递或返回一个结构体时,实际上都是在...

    Swift 3.0基础学习之类与结构体

    在 Swift 中,选择使用类还是结构体取决于需求。如果需要的是值类型的行为,如基本数据类型的复制和比较,那么结构体是更好的选择。如果需要继承、类型转换或引用计数等特性,那么应该使用类。合理地使用这两种类型...

Global site tag (gtag.js) - Google Analytics