Swift学习笔记9——类和结构体(Classes and Structures)

来源:互联网 发布:软件公寓户型图 编辑:程序博客网 时间:2024/06/05 19:11

Swift中,类和结构体是很相近的。所有下面类和结构体的实例都统称为实例。不再单独为类的实例称为对象。

和C或OC,不同,swift的类只写在一个文件里面。这点和java一样。


类和结构体的共同点:

1、能定义属性用来存储值

2、能定义方法实现功能

3、能定义下标来得到值

4、具有初始化构造器初始化实例

5、能被扩展

6、能实现协议


类比结构体多出来的特点:

1、能被继承

2、能在运行时使用类型转换判断一个实例是否为某个类

3、具有析构器

4、引用计数可以大于1,使得可以有多个引用指向同一个类的实例(注明:结构体是值传递,所有没有引用计数)


下面定义一个类和结构体,这里先提一下,类的每个属性都给了默认值,除了可选类型之外。这个是swift要求的,以后文章会详细讲到。

struct CPU {    var clockSpeed = 1.0    var coreNum = 4}class Telephone {    var cpu = CPU()     // CPU()是CPU结构体的默认构造器。它生成一个CPU实例,以后构造器的文章详细讲这方面内容    var screenSize = 5.0    var price: Int?}
然后定义他们的实例

var myTelephone = Telephone()var newCPU = CPU()

注意结构体是值传递,而类是引用传递。下面的代码清楚说明了这个特点。

var myTelephone = Telephone()var newCPU = CPU()print(myTelephone.cpu.clockSpeed)  //1.0    swift使用点语法来获得属性newCPU.clockSpeed = 2.0myTelephone.cpu = newCPU           //给myTelephone一个新的CPUprint(myTelephone.cpu.clockSpeed)  //2.0newCPU.clockSpeed = 2.2print(myTelephone.cpu.clockSpeed)  //2.0  赋值后修改newCPU并不影响myTelephone里面的CPUvar cpu = myTelephone.cpu          //取出一份CPU,但是是值传递cpu.clockSpeed = 3.0print(myTelephone.cpu.clockSpeed)  //2.0   所以修改取出的cpu不影响myTelephone里面的var yourTelephone = myTelephone     // 定义一个yourTelephone,它指向myTelephone的同一个实例yourTelephone.screenSize = 6.0print(myTelephone.screenSize)      //6.0   修改yourTelephone会影响myTelephone

Array,String,Dictionary都是值传递。这个和OC是不一样的。值得注意。


结构体自带一个遍历所有属性的构造器,但是类没有。

var cpu2 = CPU(clockSpeed: 3.3, coreNum: 8)



操作符  === 和 !==
===用来判断两个变量是否指向同一个类的实例。如果是返回true。

!==反之。指向不同实例,返回true。

而 == 是判断两个实例是否“相等”,这个相等的条件可以有类的定义者自己决定。








0 0
原创粉丝点击