《从零开始学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 = 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)——选择类还是结构体呢?相关推荐
- 从零开始学STM32(学习笔记——第三天)
CSDN话题挑战赛第2期 参赛话题:学习笔记 参考文章: [教学文章]STM32内部重要功能全记录 [教学文章]STM32内部核心功能大揭秘 [教学文章]STM32内部重要功能全记录 框架:STM32 ...
- 【学习笔记】【C语言】结构体
1.定义结构体变量的3种方式 1> 先定义类型,再定义变量(分开定义) struct Student { int age; }; struct Student stu; ...
- swift选择类或结构体
按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体: 结构体的主要目的是用来封装少量相关简单数据值. 有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用. ? 任何在 ...
- C++学习笔记 (一)指针、结构体
(一)指针 1.空指针 int * p = NULL: 指向内存中编号为0的空间,用来初始化指针变量, 其指向的内存是不可访问的(因为0~255间的内存编号由系统占用) 注: 指针前加*表示解引用,用 ...
- 关东升的《从零开始学Swift》即将出版
大家好: 苹果2015WWDC大会发布了Swift2.0,它较之前的版本Swift1.x有很大的变化,所以我即将出版<从零开始学Swift><从零开始学Swift>将在< ...
- 关东升的《从零开始学Swift》3月9日已经上架
大家一直期盼的<从零开始学Swift>于3月9日已经上架,它是关东升老师历时8个月的呕心沥血所编著,全书600多页,此本书基于Swift 2.x,通过大量案例全面介绍苹果平台的应用开发.全 ...
- 《从零开始学Swift》学习笔记(Day 33)——属性观察者
原创文章,欢迎转载.转载请注明:关东升的博客 为了监听属性的变化,Swift提供了属性观察者.属性观察者能够监听存储属性的变化,即便变化前后的值相同,它们也能监听到. 属性观察者主要有以下两个: l ...
- 影像组学视频学习笔记(30)-SMOTE解决数据不平衡的问题、Li‘s have a solution and plan.
本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(30)主要介绍: SMOTE解决数据不平衡的问题 SMOTE基本介绍 SMOTE (Synthetic Minority Over-sa ...
- 影像组学视频学习笔记(5)-特征筛选之方差选择法、Li‘s have a solution and plan.
本笔记来源于B站Up主: 有Li 的影像组学系列教学视频 本节(5)主要介绍: 特征筛选之方差选择法 针对医疗人员在影像组学研究中碰到的编程问题,李博士建议: 如果有一门编程语言基础的话会比较轻松 先 ...
最新文章
- Spring Boot+Redis+拦截器+自定义Annotation实现接口自动幂等
- 第二课unit2 控制对文件的访问
- abstract interface 和 interface 没有区别
- 从0到1使用VUE-CLI3开发实战(五):模块化VUEX及使用vuetify
- 百度宣布成立量子计算研究所,段润尧加盟任所长
- JetBrains发布Toolbox 采用新的订阅模式
- 40. MySQL的权限与安全
- 2020虚拟机下载教程(图文详解)
- 展讯SC9820E驱动配置之camera配置
- 火车票查询软件测试自学,火车票订购系统的测试报告.doc
- 当AI开始创作出令人惊叹的作品时 你的双眼已被蒙蔽
- 大一新生必看,自学必看,里昂详解数据结构之队列
- 计算机专业研究生核心能力培养(0)——计算机专业要不要读研?
- java 判断日期是周末_java计算两个日期之前的天数实例(排除节假日和周末)
- [墨者学院] 日志文件分析溯源(脱裤的IP地址)
- 使用 PLINK 把 vcf 的0/0,0/1,1/1转为字母格式的基因型(比如AA,AG,GG)
- 决策树留一法python代码_机器学习模型2 决策树-基于Python sklearn的实现
- css简易手风琴效果
- 用scoop代替chocolatey做Windows包管理器
- Windows AD证书服务系列---部署及管理证书模板(1)
热门文章
- jQuery学习之DOM操作
- ubuntu14.04 截图
- [Javascript]史上最短的IE浏览器判断代码
- Labview子VI的创建与调用
- php7 断言,PHP7.2常用新特性和函数
- c++中*是什么意思_int在python中什么意思
- java 上界和下界,Java 泛型上下界(上下限)
- cmd做个定时弹窗_windows如何设置定时关机?
- android wifi智能车,STM32智能WiFi视频小车全套资料(带安卓app与stm32源码等)
- tiny core linux 7.1,极度简约 最小 Linux 发行版 Tiny Core Linux 7.1 发布