iOS开发(Swift)总结20 - 枚举, 结构体和类

第2部分 故事的进阶要素 - 编程语言Swift的进阶部分

8 枚举, 结构体和类
8.1 概念通俗讲解

1). 枚举,简单理解:一一列举的意思。也就是说把互斥的类型一个一个列举出来。
例如性别,列举出来其中的类型:男和女。

2). 类是对现实中一类具有共同特征事物的抽象。例如我们可以把人当做一个类。
与类相对应的就是实例。实例就是类具体的实际例子。例如人是类,人中的一个具体人,比如小王,就是实例。
类的本质是一种数据类型,一种比Int等基本数据更复杂的数据类型。

3). Swift中,从概念的角度讲,结构体和类很像。
结构体也是对现实中一类具有共同特征事物的抽象。举例:我们也可以把人当做一个结构体。
与结构体相对应的也是实例。例如人是结构体,人中的一个具体人,比如小王,就是实例。

从概念上看,结构体和类是很相似的,不过实际使用中,还是有很多不同的。下面是结构体与类的比较
结构体和类的共同点

 (1)有属性
 (2)有方法
 (3)可定义下标
 (4)可定义构造器
 (5)可通过扩展增加功能
 (6)可遵循协议提供功能

结构体和类的不同点
类具有一些结构体没有的功能:

(1)继承特性
(2)类型转换在运行时可以检查和解释一个类实例
(3)析构器让一个类的实例可以释放被分配的资源
(4)引用计数功能

注:属性,方法,下标,构造过程,扩展,协议,继承,类型转换,析构过程和自动引用计数后面会具体讲解。

8.2 最简洁的定义格式

1). 枚举定义
使用enum关键字定义枚举

enum 枚举名{
   case 枚举值
   case 枚举值
}

举例:

enum Sex{
    casecase}

定义小王的性别是男性

var xiaoWangSex = Sex.

定义变量时如果指定了枚举的类型,Sex.男可以简化为.男

var xiaoLiSex : Sex = .

如下的各个case可以用一个case来简写

enum Age{
    case one
    case two
    case three
    case four
}

简写形式如下

enum Age2{
    case one, two, three, four
}
var xiaoWangAge = Age.two

2). 结构体定义
使用struct关键字定义结构体

 struct 结构体名{
 }

举例:

 struct person2{
 }

定义实例xiaoWang

 var xiaoWang = person()

定义实例xiaoLi

 var xiaoLi = person2()

3)类定义
使用class关键字定义结构体

 class类名{
 }

举例:

 class person{
 }

8.3 我的经验总结

1)枚举的本质是一个数据类型。一个自定义的数据类型。主要是定义各种互斥值的数据类型。

2)枚举的case后面是变量和常量,不能用已经知道的数据类型,例如

enum Age{
    case 1
    case 2
}

1和2属于Int类型的值,这样是不允许的。我们需要定义变量one和two才可以

3). 枚举和switch经常配对使用
举例

enum Sex{
    casecase}
var xiaoSongSex = Sex.switch xiaoSongSex {
case .:
   print("小宋是男性")
case .:
   print("小宋是女性")
}

4). 结构体是值类型,类是引用类型的总结
举例:

class person{
    var age = 10
}
struct person2{
    var age = 20
}
 
var xiaoWang = person()
var xiaoLi = person2()
 
var xiaoWang2 = xiaoWang
xiaoWang.age = 15
print(xiaoWang2.age)
 
var xiaoLi2 = xiaoLi
xiaoLi.age = 15
print(xiaoLi2.age)

注:这里var age = 10和var age = 20的age是属性,对于属性后面会做具体的讲解。
类是引用类型,引用类型实例使用的解释:
var xiaoWang2 = xiaoWang这一步实际是xiaoWang把值引用给了xiaoWang2,xiaoWang和xiaoWang2同时指向了1个内存地址。所以xiaoWang.age的值改变,xiaoWang2.age的值也跟着改变,此时xiaoWang2.age值是15
结构体是值类型,值类型实例使用的解释:
var xiaoLi2 = xiaoLi这一步实际是xiaoLi把值拷贝一份给xiaoLi2,xiaoLi和xiaoLi2是有2个内存地址的。所以xiaoLi.age的值改变,xiaoLi2.age的值不改变,此时xiaoLi2.age的值是20

5). 类实例的比较
类是引用类型,比较两个类实例是否等价与非等价的运算符如下
等价于 (=)
非等价 (!
)
举例

class person{
    var age = 10
}
class person2{
    var age = 10
}
var xiaoWang = person()
var xiaoWang2 = person2()
if xiaoWang === xiaoWang2{
}

注:本人水平和能力有限,如果哪些地方写错了,请大家给我反馈,我会及时修改。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值