Swift学习 结构体、枚举、类三者的对比

来源:互联网 发布:淘宝分析软件 编辑:程序博客网 时间:2024/05/16 14:30

为什么会把结构体放在类之后再讲呢?主要是因为在Swift中结构体和类的相同之处远远超过他们之间的不同之处。

一、结构体和类之间的关系
1、定义: 结构体是有0个或多个相同或者不同的数据组合而成的数据集合,其中的数据或者方法被称为他的成员或成员方法。
2、格式
struct name:<:protocal>{
var 成员1:数据类型
var 成员2:数据类型
….
}
3、注意事项:
(1) 结构体是值类型,其 实例将会被赋予变量或者常量和被函数调用时被复制
(2) 结构体中的成员可以包括属性、类型别名、数组、其他结构体和枚举声明
(3) 结构体声明不能包含析构器或者协议声明,但是可以包括任意协议的实现,不能继承类、枚举、其他结构体
4、一些运用
4.1 结构体的一些运用
这里写图片描述

4.2 结构体和类区别的体现
结构体
这里写图片描述


这里写图片描述

从上面的运行结果可以看出:对于结构体,新赋值不会改变原有的值,对于类,新赋值会改变原有的值。从而可以得出两个的不同之处:
(1)类的对象是引用类型,而结构体是值类型
(2)我们可以让一个类的实例来反初始化,使之释放存储空间,但是结构体做不到
(3)在数据结构的扩展和继承方面,类更加强大(结构体不能继承也不能被继承)

总结:
1、类和结构体的共同点
(1)都可以定义一些赋值的属性。属性的类型和写法大部分相同,当然也有不同,例如类型属性的写法,在类中用class前缀,在结构体中用static前缀修饰
(2)都可以定义具有功能性的方法,这个上面讲到的属性是一致的
(3)都可以定义初始化方法来设置初始状态,初始化属性
2、类和结构体的不同点
(1)类的对象是引用类型,而结构体是值类型
(2)我们可以让一个类的实例来反初始化,使之释放存储空间,但是结构体做不到
(3)在数据结构的扩展和继承方面,类更加强大(结构体不能继承也不能被继承)
3、类和结构体之间的联系
前面有讲到类的类型属性,修改可以通过带有静态变量的结构体进行”曲线修改”,从而解决类型属性的值设置问题。

这里写图片描述
这里写图片描述

二、枚举和类、结构体之间的关系
1、枚举的定义: 枚举是一种自定义的数据类型,一个枚举通常包含多个枚举成员,计算属性、类型别名、甚至其他枚举、结构体和类。在枚举声明中,每一个事件块都由一个case关键字开始,后面紧接着一个或者多个以逗号分隔的枚举成员。每一个枚举值都是常量。
2、声明:
enum enumeration name{

   case enimeration case1   case enumeration case2 。。。

}

3、关于枚举的一些运用
3.1 枚举声明成功后,成员并不会被赋初始值,如果此时访问枚举的成员,会报错。
这里写图片描述

3.2 带初始值的枚举声明
这里写图片描述

3.2 在枚举中定义方法
这里写图片描述

总结:枚举同类和结构体的对比
(1) 枚举没有属性、每一个枚举值都是常量
(2)枚举定义的方法,也只能基于本身值的操作,无法定义一些无关属性和操作.
(3)枚举和结构体是值类型,类是引用类型(值传引)。

0 0