9.类和结构体
-
结构体和类相比
Swift中结构体和类的共同点: - 定义属性⽤于存储值 - 定义方法⽤于提供功能 - 定义下标操作⽤于通过下标语法访问它们的值 - 定义构造器器用于设置初始值 - 通过扩展以增加默认实现之外的功能 - 遵循协议以提供某种标准功能 与结构体相比,类还有如下的功能: - 继承允许一个类继承另一个类的特征 - 类型转换允许在运行时检查和解释一个类实例的类型 - 析构器允许一个类实例释放任何其所被分配的资源 - 引用计数允许对一个类的多次引⽤ 结构体和类有着相似的定义方式。 struct Resolution { var width = 0 var height = 0 } class VideoMode { var resolution = Resolution() var interlaced = false var frameRate = 0.0 var name: String? } 结构体和类都使用构造器语法来创建新的实例例。构造器语法的最简单形式是在结构体或者类的类型名称后跟随⼀对空括号,如 Resolution() 或 VideoMode()。你可以通过使用点语法访问实例的属性。其语法规则是,实例名后⾯紧跟属性名,两者以点号 ( . )分隔,不带空格 let someResolution = Resolution() someResolution.width = 5 let someVideoMode = VideoMode() someVideoMode.resolution = someResolution //结构体类型的成员逐一构造器器 所有结构体都有一个⾃动生成的成员逐一构造器器,⽤于初始化新结构体实例中成员的属性。与结构体不同,类实例例没有默认的成员逐一构造器。 let vga = Resolution(width: 640, height: 480)
-
结构体和枚举是值类型
//值类型是这样一种类型,当它被赋值给一个变量、常量或者被传递给一个函数的时候,其值会被拷⻉。 实际上,Swift 中所有的基本类型:整数 (integer)、浮点数(floating-point number)、布尔值(boolean)、字符串串(string)、数组 (array)和字典(dictionary),都是值类型,其底层也是使⽤用结构体实现的。Swift 中所有的结构体和枚举类型都是值类型。这意味着它们的实例例,以及实例例中所包含的任何 值类型的属性,在代码中传递的时候都会被复制。
-
类是引用类型
与值类型不同,引⽤类型在被赋予到一个变量量、常量或者被传递到一个函数时,其值不会被拷贝。因此,使用的是已存在实例的引⽤,而不是其拷贝。 因为类是引⽤类型,所以多个常量和变量可能在幕后同时引⽤一个类实例例。(对于结构体和枚举来说,这并不成立。因为它们作为值类型,在被赋予到常量、变量或者传递到函数时,其值总是会被拷⻉。) //恒等运算符:判定两个常量或者变量是否引用同一个类实例 相同( === ) 不相同( !== )
网友评论