Swift 中的数据结构主要由以下三大类构成(类,结构体,枚举),它们的声明结构非常相似:
Class newClass {//创建了一个新类}
struct newStruct {//创建了一个结构体}
Enum newEnum {//创建了一个枚举}
三者都可以拥有属性,方法。枚举本身不能存储数据,但是可以将数据存储在枚举的关联信息中。类是三者中唯一拥有继承属性的,内省和转型也是类的特性。三种类型最主要的区别就是 值类型和引用类型。结构体和枚举传递存储的是复制后的值; 而类属于引用类型,传递的是对象的指针,这些对象存储在(Heap)堆中。和其他很多面向对象语言一样,类的指针保存在栈上。栈中的对象系统会自动为我们管理(ARC),这样就不用去开辟和释放内存空间了。一旦没有指针指向对象,那么对象会马上被清理掉,这不是垃圾回收机制,这是自动引用计数(ARC)。而定长的结构体和枚举是直接保存在栈上的,变长的结构体和枚举需要堆内存的配合,栈的空间有限,运行速度更快。
类
在OC 里 创建类,有 接口文件.h和 实现文件.m ,而swift 生成类时,只有一个文件,swift文件。定义类用 : “class”关键字。Class Student {var name: String = “”var age: Int = 10}这个 student 类中 有两个属性,并且都声明了属性和做了初始化。创建一个类的实例方法为: let classItem = Student().
注意!!!,由于类是引用类型的,虽然用了let关键字声明,表达了不希望类被改变的意图,但是只要不改变类的指针,你仍然可以随意修改类中的属性,通常这种修改都是非刻意的,会造成bug风险,很难发觉。相比于OC要先开辟 堆中的内存空间,再做初始化的操作,Swift 创建一个类实例的代码非常的简单,在工程中会大量使用到类,因为所有控制器都是类。在OC里比如使用 DoubleValue,会将以自身的值以 Double 返回给我们。但Swift中不会用太多这样的东西,因为 Swift是强类型的。 例子:Let n = NSNumber(double:12.3)Var inversion = n.intValue // intversion的值为12.
NSDate类型可以获取当前的日期和时间,Swift 3.0 中封装了原生的 Date 对象,它是个结构体。NSDate 很简单,它是一个比特包,不管大小它里面都是五类线的数据。iOS通过这个类传递无类型的数据,也叫做原始数据。
更多类的使用和体会总结,待补充。