Swift语言中的枚举和结构体
来源:互联网 发布:js中字符串的方法 编辑:程序博客网 时间:2024/05/17 23:27
枚举enum和结构体与C中的类似,主要用于别名定义一些有限的类型和一些复杂的数据结构。但是在swift中的枚举呢除了具有基本的类型限制和别名使用外还可以进行继承,遵守协议。
结构体struct和后续的类相似,但是结构体是一个值拷贝的数据类型。
一:枚举
1:枚举的声明
声明一个枚举需要使用关键字enum;
enum Toward{
case Forward
case Back
case Left
case Right
}
case 关键字表示增加一个枚举定义值,当然,还可以把所有的枚举值写在一行当中。
enum Toward{
case Forward , Back , Left , Right
2:枚举值
枚举元素只有在指定了类型之后才可能有原始值,可以用 toRaw() 的方法获取枚举的原始值。
例如:
let goTo = Toward.Left //获取枚举中的某个定义的值
print(goTo.toRaw()) //错误的。因为枚举中并没有对每个元素赋相应的值。
在以上的定义中,四个枚举值并没有被赋具体的值(这与C语言中不同的地方)
如果要给枚举中定义的所有的枚举值赋值,需要指定枚举的类型。
enum Toward:Int {
case Forward , Back , Left , Right
}
这时,枚举中的四个元素就被默认赋值从0 开始的整数。
let goTo = Toward.Left
print(goTo.toRaw())
//输出为2也可以手动给每个枚举元素赋值
enum Toward:Int {
case Forward = 2, Back , Left = 20 , Right
}
当给某一个元素赋值后,后面的元素会根据该元素的值依次赋值。let goTo = Toward.Back
print(goTo.toRaw())
//输出为3print (Toward.Right.toRaw())
//输出为21
在swift中,枚举还可以被指定为其他类型,例如:String
enum Toward:String {
case Forward = “a”, Back = “b”, Left = “K” , Right = “F”
}
print (Toward.Right.toRaw())
注意咯:如果指定枚举的类型为非Int,需要给每个枚举元素指定值,并且每一个值都必须是唯一的。像下面这样就有问题。
enum Toward:Double{
case Forward = 1.2
case Back = 1.2 //错误,因为1.2这个值已经存在
case Left = 2.5
case Right
//错误,因为这个枚举被指定为Double类型,必须给每一个元素指定值
}
enum Toward:Int {
case Forward = 2, Back , Left = 20 , Right
}
let toDirect = Toward.fromRaw(21)//这里 toDirect 的类型是可选Toward,因为在枚举定义中不一定存在原始值为21的成员,此时 toDirect 的值为 Toward.Right
4:枚举的使用方法
枚举使用的场景较多,但是用法相对单一,一般都是用来表示一组相互关联的情况,或者数值。
//定义一个枚举
enum TowardEvent {
case TouchUpInSide
case TouchDown
case DoubleClick
}
//定义一个事件,并指定其类型为TowardEvent
var event:TowardEvent
//定义event的事件类型为单击
event = TowardEvent .TouchUpInSide
//处理事件
switch event {
case.TouchUpInSide:
print(:按钮被单击")
case.TouchDown:
print("按钮被按下")
case.DoubleClick:
print("按钮被双击")
}
//输出:按钮被单击在switch-case中必须覆盖所有枚举的成员情况。如果某些情况不需要单独处理,则必须使用Default进行处理。
switch event {
case.TouchUpInSide:
print(:按钮被单击")
case.TouchDown:
print("按钮被按下")
Default:
print ("其他情况")
}
二、结构体结构体是用来保存一个对象或者说一种事物的一组信息,例如说:一个学生,有学号,姓名,性别等属性。结构体与枚举不同,一个变量被声明为某一个枚举类型后,它的值仅仅是枚举类型中所定义的一组值中的一个,而一个变量声明为结构体后,就包含了结构体中定义的所有值。
1:结构体的声明和定义
可以用 struct 关键字来声明一个结构体;
struct Student {
var sID : Int ; // 学号
var sName : String; // 姓名
var sSex : Bool; // 性别
var sPhone : String; // 电话
}
在结构体声明时,也可以不指定属性的类型,而是需要给每一个属性赋值,并通过类型识别获取所有属性的类型。
struct Student {
var sID = 0
var sName = " "
var sSex = true
var sPhone = " "
}
再定义一个班级结构体。
struct ClassRoom{
var ClassId = 0
var ClassName = “”
var ClassCharge = Teacher() //老师
}
定义一个学生结构体。
struct Student{
var stuId = 0
var ClassInfo = ClassRoom()
var stuName = " "
var stuSex = true
var stuPhone = " "
}
现在定义一个学生,对学生的信息进行赋值:
var Zhang = Student()
Zhang.stuName = “张三”
Zhang.ClassInfo.ClassName = "Swift语言"
Zhang.ClassInfo.ClassCharge.tName = "马云"
print ("学生:"+Zhang.stuName +"班级:"+Zhang.ClassInfo.ClassName+"老师:"+Zhang.ClassInfo.ClassCharge.tName)
//输出:学生:张三 班级:Swift语言 老师:马云
在结构体的嵌套中,对实例属性的访问使用链式方式进行访问。也就是结构体中可以一层一层的进行嵌套读写操作。
5:结构体是值拷贝类型
值类型是相对于引用类型来说的,是指两个结构体实例变量之间进行赋值时,是对结构体所有内容进行内容拷贝。
var Ma = Zhang
Ma.stuName = "马化腾"
print(Ma.stuName)
print(Zhang.stuName)
//输出:
//马化腾
//张三
*****************************************************************************************************************************************886
- Swift语言中的枚举和结构体
- C语言中的结构体和枚举
- C语言中的结构体和枚举
- Swift语言学习4--枚举和结构体
- swift 枚举和结构体
- Swift-枚举和结构体
- Swift枚举和结构体
- Swift 枚举和结构体
- 第五节 Swift 枚举和结构体
- swift入门 枚举和结构体
- Swift语法基础:5 - Swift的枚举和结构体
- 职群教育 | IOS开发 Swift语言入门(五):枚举和结构体
- Swift-枚举、结构体、类
- C语言--结构体和枚举
- Swift的闭包,枚举,类和结构体
- Swift 学习之枚举和结构体—003
- Swift学习小结之枚举和结构体
- Swift2学习:Swift概览5-枚举和结构体
- STL源码剖析——空间配置器
- linux /etc/security/limits.conf的相关说明
- create table用圆括号()
- java基础之数组
- JSP第一篇
- Swift语言中的枚举和结构体
- Mybatis的增删改查
- suppose如何用
- 盒子模型
- 函数对象(2)
- U-Boot常用命令
- 剑指Offer----面试题23:从上往下打印二叉树(层序遍历)
- 较为简洁明了的KMP算法解释
- JDBC连接数据库之连接池(5)