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

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

类和结构体异同:

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

  • 定义存储属性

  • 定义方法

  • 定义下标

  • 定义构造函数

  • 定义扩展

  • 实现协议

    只有类才有的功能:

  • 能够继承另外一个类

  • 能够核对运行期对象的类型

  • 析构对象释放资源

  • 引用计数允许一个实例有多个引用

选择的原则:

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

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 = 9000var emp2  = Employee()
emp2.no = 100
emp2.name ="Tom"
emp2.job ="SALES"
emp2.salary = 9000

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

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

struct Department {var no: Int = 0var 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不同。

欢迎关注关东升新浪微博@tony_关东升。
关注智捷课堂微信公共平台,了解最新技术文章、图书、教程信息
                             
更多精品iOS、Cocos、移动设计课程请关注智捷课堂官方网站:http://www.zhijieketang.com
智捷课堂论坛网站:http://51work6.com/forum.php

转载于:https://blog.51cto.com/tonyguan/1746591

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

  1. 从零开始学STM32(学习笔记——第三天)

    CSDN话题挑战赛第2期 参赛话题:学习笔记 参考文章: [教学文章]STM32内部重要功能全记录 [教学文章]STM32内部核心功能大揭秘 [教学文章]STM32内部重要功能全记录 框架:STM32 ...

  2. 【学习笔记】【C语言】结构体

    1.定义结构体变量的3种方式  1> 先定义类型,再定义变量(分开定义)  struct Student  {     int age;  };  struct Student stu;     ...

  3. swift选择类或结构体

    按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体: 结构体的主要目的是用来封装少量相关简单数据值.  有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用. ? 任何在 ...

  4. C++学习笔记 (一)指针、结构体

    (一)指针 1.空指针 int * p = NULL: 指向内存中编号为0的空间,用来初始化指针变量, 其指向的内存是不可访问的(因为0~255间的内存编号由系统占用) 注: 指针前加*表示解引用,用 ...

  5. 关东升的《从零开始学Swift》即将出版

    大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift><从零开始学Swift>将在< ...

  6. 关东升的《从零开始学Swift》3月9日已经上架

    大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全 ...

  7. 《从零开始学Swift》学习笔记(Day 33)——属性观察者

    原创文章,欢迎转载.转载请注明:关东升的博客 为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: l ...

  8. 影像组学视频学习笔记(30)-SMOTE解决数据不平衡的问题、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(30)主要介绍: SMOTE解决数据不平衡的问题 SMOTE基本介绍 SMOTE (Synthetic Minority Over-sa ...

  9. 影像组学视频学习笔记(5)-特征筛选之方差选择法、Li‘s have a solution and plan.

    本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(5)主要介绍: 特征筛选之方差选择法 针对医疗人员在影像组学研究中碰到的编程问题,李博士建议: 如果有一门编程语言基础的话会比较轻松 先 ...

最新文章

  1. Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等
  2. 第二课unit2 控制对文件的访问
  3. abstract interface 和 interface 没有区别
  4. 从0到1使用VUE-CLI3开发实战(五):模块化VUEX及使用vuetify
  5. 百度宣布成立量子计算研究所,段润尧加盟任所长
  6. JetBrains发布Toolbox 采用新的订阅模式
  7. 40. MySQL的权限与安全
  8. 2020虚拟机下载教程(图文详解)
  9. 展讯SC9820E驱动配置之camera配置
  10. 火车票查询软件测试自学,火车票订购系统的测试报告.doc
  11. 当AI开始创作出令人惊叹的作品时 你的双眼已被蒙蔽
  12. 大一新生必看,自学必看,里昂详解数据结构之队列
  13. 计算机专业研究生核心能力培养(0)——计算机专业要不要读研?
  14. java 判断日期是周末_java计算两个日期之前的天数实例(排除节假日和周末)
  15. [墨者学院] 日志文件分析溯源(脱裤的IP地址)
  16. 使用 PLINK 把 vcf 的0/0,0/1,1/1转为字母格式的基因型(比如AA,AG,GG)
  17. 决策树留一法python代码_机器学习模型2 决策树-基于Python sklearn的实现
  18. css简易手风琴效果
  19. 用scoop代替chocolatey做Windows包管理器
  20. Windows AD证书服务系列---部署及管理证书模板(1)

热门文章

  1. jQuery学习之DOM操作
  2. ubuntu14.04 截图
  3. [Javascript]史上最短的IE浏览器判断代码
  4. Labview子VI的创建与调用
  5. php7 断言,PHP7.2常用新特性和函数
  6. c++中*是什么意思_int在python中什么意思
  7. java 上界和下界,Java 泛型上下界(上下限)
  8. cmd做个定时弹窗_windows如何设置定时关机?
  9. android wifi智能车,STM32智能WiFi视频小车全套资料(带安卓app与stm32源码等)
  10. tiny core linux 7.1,极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布