1. 枚举语法

     1)枚举的定义

使用enum关键词而且把它们的整个定义放在一对大括号内:

enum SomeEumeration {      // enumeration definition goes here  }  

以下来看看详细样例:

enum CompassPoint {
case North
case South
case East
case West
}

注意:

          ①不像C和Objective-C一样,Swift的枚举成员在被创建时不会被赋予一个默认的整数值。在上面的CompassPoints样例中,North。South,East和West并非等于0,1。2和3

          ②良好的书写习惯是,每一个枚举变量均以大写开头,而且枚举的名字不要使用复数形式



     上面的样例或者也能够这样写:

                    enum CompassPoint {
case North, South, East, West }

          将全部成员放在一个case中。并用逗号隔开

        

     2)枚举类型的使用

          枚举类型使用时和使用类的属性一样。

                    var a =
CompassPoint.North

     

     3)省略枚举类型

          当a的类型被判断为CompassPoint的一个可能值时。你能够使用更短的点(.)语法将其设置为还有一个CompassPoint的值,省略枚举类型:

var a = CompassPoint.North
a = .South

2.匹配枚举值和Switch语句

switch a {
case .North:
println("Lots of planets have a north")
case .South:
println("Watch out for penguins")
case .East:
println("Where the sun rises")
case .West:
println("Where the skies are blue")
}

重点:

               ①当枚举值和switch语句连用时,也能够省略枚举类型

               ②使用switch时,必须考虑到全部的枚举对象,否则编译器会报错



3. 实例值

     枚举类型能够定义实例值。在使用的时候再给实例赋详细的值

enum test{
case name(String)
case count(Int,Int)
} //枚举定义的是多种不同类型
var a = test.name("小笨狼") //枚举类型中详细值能够在使用时才赋值
switch a{
case .name(let nameString): //定义nameString来存放枚举的值,这里是"小笨狼"
println(nameString)
case let .count(count1,count2): //假设有多个值。能够将let或者var放在括号外面一起定义
println(count1+count2)
}

重点:

               ①枚举值能够是不同类型的,不论什么类型的值

               ②枚举定义时不一定要赋值,能够在使用时再赋值

               ③在switch中使用时。须要再定义变量来存放枚举值



4.原始值

          1)原始值定义

                    原始值就和C语言中的枚举差点儿相同

enum test:Int{
case first = 1
case second,third
}

重点:

               ①在定义的时候申明原始值类型,这里是Int类型。

原始值类型能够是字符串。字符,或者不论什么整型值或浮点型值

               ②每一个原始值在它的枚举声明中必须是唯一的。

               ③当整型值被用于原始值。假设其它枚举成员没有值时。它们会自己主动递增。

这里second=2,third=3

          2)原始值的使用

               使用枚举成员的toRaw方法能够訪问该枚举成员的原始值:

                    let a =
test.second.toRaw()
    //a=2 Int类型

                使用枚举的fromRaw方法能够找到具有特定原始值的枚举成员

          let b =
test.fromRaw(2)
    //b = test.second



5.函数

          枚举中还能够使用函数

enum test:Int{
case first = 1
case second,third
func descript() -> String{
switch self{
case .first:
return "first"
case .second:
return "second"
case .third:
return "third"
}
}
}
if let c = test.fromRaw(2) {
println(c.descript()) //输出second
}

打印c.descript()输出second,可是假设c不在if中定义,编译器会报错,找不到descript的成员变量,这个问题我还没弄清楚为什么

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQveGJlbmxhbmc=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">

Swift学习笔记八:枚举的更多相关文章

  1. Swift学习笔记 - 位移枚举的按位或运算

    在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 ...

  2. Swift学习笔记(10)--枚举

    1.定义语法: enum SomeEnumeration { // enumeration definition goes here } 2.使用 enum CompassPoint { case N ...

  3. swift学习笔记之-枚举

    //枚举定义 import UIKit //枚举定义 (枚举.结构体.类的名字首字母必须大写,表示为定义了新的类型) /*枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来 ...

  4. Swift 学习笔记 enum 枚举类型

    异端,异端啊,我感觉这是map吧? enum ATMStatus { case Success(Int) case Error(String) } func withdraw(amount: Int) ...

  5. Swift学习笔记八

    函数 Swift的函数语法非常独特,也提供了很高的灵活性和可读性.它可以充分表达从简单的无参数C风格函数到复杂的拥有局部变量和外部变量的OC风格的方法.参数可以有默认值,方便函数的调用.Swift中的 ...

  6. 【swift学习笔记】二.页面转跳数据回传

    上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...

  7. Swift学习笔记(一)搭配环境以及代码运行成功

    原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...

  8. CLR_Via_C#学习笔记之枚举

    CLR_Via_C#学习笔记之枚举 枚举类型(Enum)定义的一组"符号名称/值"配对:因为枚举类型使用程序更容易编写.阅读和维护,而且它是强类型: 枚举是值类型:由System. ...

  9. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

随机推荐

  1. C语言笔记(二维数组与数值指针)

    一.关于二维数组和二维数组区别 (1)一维数组在内存中是连续分布存储的,同样,二维数组也是在内存连续存储的.所以从内存的角度来分析,一维数组和二维数组其实没有本质区别. (2) 二维数组可以使用一维数 ...

  2. codevs 1066 引水入城

    传送门 题目描述 Description 在一个遥远的国度,一侧是风景秀美的湖泊,另一侧则是漫无边际的沙漠.该国的行政 区划十分特殊,刚好构成一个N行M列的矩形,如上图所示,其中每个格子都代表一座城 ...

  3. bzoj 2331: [SCOI2011]地板 插头DP

    2331: [SCOI2011]地板 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 541  Solved: 239[Submit][Status] D ...

  4. 【转载】利用jetty+Eclipse实现超轻量级web开发

    之前一直使用maven的jetty插件.今天换种方式. 使用下面介绍的方式你只有一个java project就行. 开发环境更简单,debug也更方便,不需要remote debug的方式,jetty ...

  5. 你的 Docker 应用是安全的吗?

    近一年来,Docker 已经逐渐成为 container 界的事实标准,成为技术人员不可或缺的技能之一,就像 Docker 宣称的那样,「Build,Ship,and Run Any App,Anyw ...

  6. 使用Python实现Hadoop MapReduce程序

    转自:使用Python实现Hadoop MapReduce程序 英文原文:Writing an Hadoop MapReduce Program in Python 根据上面两篇文章,下面是我在自己的 ...

  7. 【POJ3415】 Common Substrings(后缀数组|SAM)

    Common Substrings Description A substring of a string T is defined as: T(i, k)=TiTi+1...Ti+k-1, 1≤i≤ ...

  8. Spring与Oauth2整合示例 spring-oauth-server

    原文地址:http://www.oschina.net/p/spring-oauth-server?fromerr=vpTctDBF

  9. Keil C51软件的使用

    进入 Keil C51 后,屏幕如下图所示.几秒钟后出现编辑界 启动Keil C51时的屏幕 进入Keil C51后的编辑界面 简单程序的调试:学习程序设计语言.学习某种程序软件,最好的方法是直接操作 ...

  10. 14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering

    14.6.5 Configuring InnoDB Change Buffering 配置InnoDB Change Buffering 当插入,更新,和删除操作在表上执行, 索引列的值(特别是 se ...