您的位置:首页 > 移动开发 > Swift

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

2015-10-03 13:16 405 查看
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.0
myTelephone.cpu = newCPU //给myTelephone一个新的CPU
print(myTelephone.cpu.clockSpeed) //2.0
newCPU.clockSpeed = 2.2
print(myTelephone.cpu.clockSpeed) //2.0 赋值后修改newCPU并不影响myTelephone里面的CPU

var cpu = myTelephone.cpu //取出一份CPU,但是是值传递
cpu.clockSpeed = 3.0
print(myTelephone.cpu.clockSpeed) //2.0 所以修改取出的cpu不影响myTelephone里面的

var yourTelephone = myTelephone // 定义一个yourTelephone,它指向myTelephone的同一个实例
yourTelephone.screenSize = 6.0
print(myTelephone.screenSize) //6.0 修改yourTelephone会影响myTelephone


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

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

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


操作符 === 和 !==

===用来判断两个变量是否指向同一个类的实例。如果是返回true。
!==反之。指向不同实例,返回true。

而 == 是判断两个实例是否“相等”,这个相等的条件可以有类的定义者自己决定。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: