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要求的,以后文章会详细讲到。
注意结构体是值传递,而类是引用传递。下面的代码清楚说明了这个特点。
Array,String,Dictionary都是值传递。这个和OC是不一样的。值得注意。
结构体自带一个遍历所有属性的构造器,但是类没有。
操作符 === 和 !==
===用来判断两个变量是否指向同一个类的实例。如果是返回true。
!==反之。指向不同实例,返回true。
而 == 是判断两个实例是否“相等”,这个相等的条件可以有类的定义者自己决定。
和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。
而 == 是判断两个实例是否“相等”,这个相等的条件可以有类的定义者自己决定。
相关文章推荐
- Swift学习- 继承(十三)
- Swift学习笔记8——枚举类(Enumerations)
- swift map
- 【面试必备】Swift 面试题及其答案
- 寒哥带你深入了解下Swift中的Value Type
- Swift-循环控制新特性
- Swift - 元组的用法
- Swift 运算符
- Swift学习(二)
- Swift学习(一)
- Swift中的数据类型
- 7.Swift翻译教程系列——控制循环的流程
- swift基础学习篇发布时间调整
- swift 中switch 的新用法
- swift实现ios类似微信输入框跟随键盘弹出的效果
- swift的类和对象
- swift的类与对象讲解
- swift的函数与闭包
- swift语法讲解及简单入门教程
- swift闭包