第七课类和结构体

来源:互联网 发布:apache tomcat怎么解决 编辑:程序博客网 时间:2024/05/16 15:25

类和结构体是人们构建代码所用的一种通用且灵活的构造体。为了在类和结构体中实现各种功能,我们必须要严格按照对于常量,变量以及函数所规定的语法规则来定义属性和添加方法。一个类的实例,被成为对象。Swift 中类和结构体有很多共同点。

1:类和结构体对比
共同处: 定义属性用于储存值、定义方法用于提供功能、定义下标用于通过下标语法访问值、定义初始化器用于生成初始化值、通过扩展以增加默认实现的功能、符合协议以对某类提供标准功能。

不同处:类可以继承,类型转换允许在运行是检查和解释一个类的实例类型,也就是在运行时检查一个类的实例类型。
允许一个类实例释放任何其所被分配的资源、引用计数允许对一个类的多次引用。

2:定义
class Demo{ // 这是类的一个定义, class 是定义类的关键字。{}大括号是类体。
}

struct Demo{ //这是一个结构体的定义,struct 是定义结构体的关键字,{}大括号是结构体。
}
类和结构体的命名方式,使用驼峰式命名,就是每一个单词的首字母大写比如:NameDemo

struct Car {

var width:Int = 100var heigth:Int = 200使用init 作为结构体初始化方法, 如果不写,结构体默认是:init(){} 初始化方法。init(wis:Int, hgt:Int){ //这是结构体初始化方法,在结构体初始化的时候,就设置宽高    width = wis    heigth = hgt}

//
init(){}
}

class CarDemo: NSObject {

var car = Car(wis: 12, hgt: 123)var name:String?override init() { //这是类的初始化方法,与结构体不同的是,在初始化方法中,需要调用父类初始化方法。    super.init()}init(name: String) {    super.init()    self.name = name}

}

let car = Car() //调用初始化方法,初始化结构体。
let carDemo = CarDemo()//调用初始化方法,初始化实例。
// 属性访问
println(“(carDemo.car.heigth)”)//打印汽车的高度
carDemo.car.width = 100 //为属性复制。

类是引用类型
与值类型不同,引用类型在被赋予到一个变量,常量或者被传递到一个函数时,操作的并
不是其拷贝。因此,引用的是已存在的实例本身而不是其拷贝。
let carDemo = CartDemo()
let carTest = carDemo //因为类是引用类型,所以carDemo,carTest指向的是CartDemo的同一个实例。

恒等运算符,用作判断两个常量和变量所引用类的实例,是否同一个实例。等价于 ( === ) 不等价于 (!==)
let carDemo = CartDemo()
let carTest = carDemo

if carDemo === carTest //结果为true ,因为carDemo,carTest都是引用的同一个实例。
if carDemo !== carTest //结果为false

按照通用的准则,当符合一条或多条以下条件时,请考虑构建结构体:
结构体的主要目的是用来封装少量相关简单数据值。
有理由预计一个结构体实例在赋值或传递时,封装的数据将会被拷贝而不是被引用。
任何在结构体中储存的值类型属性,也将会被拷贝,而不是被引用。
结构体不需要去继承另一个已存在类型的属性或者行为。

在所有其它案例中,定义一个类,生成一个它的实例,并通过引用来管理和传递。实际
中,这意味着绝大部分的自定义数据构造都应该是类,而非结构体。

0 0
原创粉丝点击