文档章节

Swift -- 枚举

上官尘
 上官尘
发布于 2016/02/27 22:53
字数 783
阅读 63
收藏 1
点赞 1
评论 0

一:枚举的定义及语法

/*Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样增加属性和方法
格式:
enum Method{
    case 枚举值
}*/


enum Method{
//    case Add
//    case Sub
//    case Mul
//    case Div
// 可以连在一起写,成员之间用“,“隔开
    case Add, Sub, Mul, Div
}

// 可以使用枚举类型变量或常量接收枚举值
var m: Method = .Add
// 注意: 如果变量或常量没有指定类型, 那么前面必须加上该值属于哪个枚举类型
var m1 = Method.Add

二:值匹配

// 注意: 如果case中包含了所有的值, 可以不写default. 如果case中没有包含枚举中所有的值, 必须写default
switch (Method.Add){
    case Method.Add:
        print("加法")
    case Method.Sub:
        print("减法")
    case Method.Mul:
        print("除法")
    case Method.Div:
        print("乘法")
//    default:
//        print("都不是")
}

三:原始值

/*
原始值:
 OC中枚举的本质就是整数,所以OC中的枚举是有原始值的,默认是从0开始
而Swift中的枚举默认是没有原始值的, 但是可以在定义时告诉系统让枚举有原始值
enum Method: 枚举值原始值类型{
    case 枚举值
}
*/

enum Method2: Int{
    // 可以连在一起写
    case Add, Sub, Mul, Div
}
print(Method2.Sub.rawValue)//定义枚举类型为int型,默认从0开始,后面逐一加一
// 和OC中的枚举一样, 也可以指定原始值, 后面的值默认+1
enum Method3: Int{
    case Add = 5, Sub, Mul, Div
}

// Swift中的枚举除了可以指定整形以外还可以指定其它类型, 但是如果指定其它类型, 必须给所有枚举值赋值, 因为不能自动递增
enum Method4: Double{
    // 可以连在一起写
    case Add = 5.0, Sub = 6.0, Mul = 6.1, Div = 8.0
}
// rawValue代表将枚举值转换为原始值, 注意老版本中转换为原始值的方法名叫toRaw
print(Method4.Sub.rawValue)


// 原始值转换为枚举值
enum Method5: String{
    case Add = "add", Sub = "sub", Mul = "mul", Div = "div"
}

// 通过原始值创建枚举值
/*
注意: 
1.原始值区分大小写
2.返回的是一个可选值,因为原始值对应的枚举值不一定存在
3.老版本中为fromRaw("add")
*/
let m2 = Method5(rawValue: "add")
print(m2)

//func chooseMethod(op:Method2)
    func chooseMethod(op:String)
{
    // 由于返回是可选类型, 所以有可能为nil, 最好使用可选绑定
    if let opE = Method5(rawValue: op){
        switch (opE){
        case .Add:
            print("加法")
        case .Sub:
            print("减法")
        case .Mul:
            print("除法")
        case .Div:
            print("乘法")
        }
    }
}

四:枚举关联值

/*
枚举相关值:
可以让枚举值对应的原始值不是唯一的, 而是一个变量.
每一个枚举可以是在某种模式下的一些特定值
*/
enum lineSegmentDescriptor{
    case StartAndEndPattern(start:Double, end:Double)
    case StartAndLengthPattern(start: Double, length:Double)
}

var lsd = lineSegmentDescriptor.StartAndLengthPattern(start: 0.0, length: 100.0)
lsd = lineSegmentDescriptor.StartAndEndPattern(start: 0.0, end: 50.0)
// 利用switch提取枚举关联值
/*
switch lsd
{
    case .StartAndEndPattern(let s, let e):
        print("start = \(s) end = \(e)")
    case .StartAndLengthPattern(let s, let l):
        print("start = \(s) lenght = \(l)")
}
*/

// 提取关联值优化写法
switch lsd
{
        case let .StartAndEndPattern(s, e):
            print("start = \(s) end = \(e)")
        case .StartAndLengthPattern(let s, let l):
            print("start = \(s) lenght = \(l)")
}


© 著作权归作者所有

共有 人打赏支持
上官尘
粉丝 6
博文 38
码字总数 9881
作品 0
普陀
程序员
Swift特点&与OC的不同

1.特点:快速 现代 安全 互动 2.可以使用现有的Cocoa 和Cocoa Touch框架 3.playground:只需要一个文件 不用创建工程 4.swift与OC的不同 -类文件的后缀名以.swift结尾; -没有main.m文件;...

KevinEmily
2016/03/03
88
0
新语言的诞生:Swift学习资料汇总

今年的苹果开发者大会(WWDC)上,公布了ios8的几个新特性,其中包括引入了群聊功能,支持第三方输入法等功能。但更让开发者感兴趣的莫过于Swift语言的发布了。 Swift是apple自创的一门转为coc...

geeklxl
2014/06/03
8.4K
15
Swift讲解专题九——枚举

Swift讲解专题九——枚举 一、引言 在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以...

珲少
2016/05/15
113
0
Swift 个人学习笔记 - 07: 枚举

本文章纯粹是中文版《The Swift Programming Language》的学习笔记,所以绝大部分的内容都是文中有的。本文是本人的学习笔记,不是正式系统的记录。仅供参考 以下还是有很多没看懂、不确定的...

amc
2017/03/09
0
0
iOS开发系列--Swift语言

概述 Swift是苹果2014年推出的全新的编程语言,它继承了C语言、ObjC的特性,且克服了C语言的兼容性问题。Swift发展过程中不仅保留了ObjC很多语法特性,它也借鉴了多种现代化语言的特点,在其...

jianxin160
2015/08/18
0
0
在 Swift 中实现 NS_OPTIONS

从Xcode 4.5以后,我们在Objective-C中使用NSENUM和NSOPTIONS来定义一个枚举,以替代C语言枚举的定义方式。其中NSENUM用于定义普通的枚举,NSOPTIONS用于定义选项类型的枚举。 而到了Swift中...

hejunbinlan
2015/09/17
13
0
[Swift] Enum 好用, Enum 可以更易用

Swift 中的枚举可以说好用到让我惊讶.但是我可以让它更易用. 经典用例 比如 用它来封装 应用 微信的 Tab 栏枚举,如下: 到这里已经比用整型常量好很多了.好了,现在你想将 UITabBarItem 中的构...

李海珍
2016/12/24
12
0
Swift解读专题一——Swift2.2语言预览

专题一——Swift2.2语言预览 一、引言 本系列专题是我通过阅读Swift2.2语言开发文档,翻译总结加上自己的理解整理而成。其中大部分结构和内容都来自开发文档,有疏漏和错误之处,还望更多朋友...

珲少
2016/05/05
825
0
《从零开始学Swift》学习笔记(Day 24)——枚举

原创文章,欢迎转载。转载请注明:关东升的博客 Swift中的枚举可以定义一组常量、提高程序的可读性;还具有面向对象特性。 使用enum关键词声明枚举类型,具体定义放在一对大括号内,枚举的语...

智捷课堂
2015/10/19
22
0
Swift笔记枚举和结构体

枚举 枚举概念 枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值 C/OC语言中枚举指定相关名称为一组整形值 Swift 中的枚举更加灵活,可以提供一个值是...

大基本功
2017/12/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

实现异步有哪些方法

有哪些方法可以实现异步呢? 方式一:java 线程池 示例: @Test public final void test_ThreadPool() throws InterruptedException { ScheduledThreadPoolExecutor scheduledThre......

黄威
26分钟前
0
0
linux服务器修改mtu值优化cpu

一、jumbo frames 相关 1、什么是jumbo frames Jumbo frames 是指比标准Ethernet Frames长的frame,即比1518/1522 bit大的frames,Jumbo frame的大小是每个设备厂商规定的,不属于IEEE标准;...

六库科技
今天
0
0
牛客网刷题

1. 二维数组中的查找(难度:易) 题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入...

大不了敲一辈子代码
今天
0
0
linux系统的任务计划、服务管理

linux任务计划cron 在linux下,有时候要在我们不在的时候执行一项命令,或启动一个脚本,可以使用任务计划cron功能。 任务计划要用crontab命令完成 选项: -u 指定某个用户,不加-u表示当前用...

黄昏残影
昨天
0
0
设计模式:单例模式

单例模式的定义是确保某个类在任何情况下都只有一个实例,并且需要提供一个全局的访问点供调用者访问该实例的一种模式。 实现以上模式基于以下必须遵守的两点: 1.构造方法私有化 2.提供一个...

人觉非常君
昨天
0
0
《Linux Perf Master》Edition 0.4 发布

在线阅读:https://riboseyim.gitbook.io/perf 在线阅读:https://www.gitbook.com/book/riboseyim/linux-perf-master/details 百度网盘【pdf、mobi、ePub】:https://pan.baidu.com/s/1C20T......

RiboseYim
昨天
1
0
conda 换源

https://mirrors.tuna.tsinghua.edu.cn/help/anaconda/ conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/conda config --add channels https://mir......

阿豪boy
昨天
1
0
Confluence 6 安装补丁类文件

Atlassian 支持或者 Atlassian 缺陷修复小组可能针对有一些关键问题会提供补丁来解决这些问题,但是这些问题还没有放到下一个更新版本中。这些问题将会使用 Class 类文件同时在官方 Jira bug...

honeymose
昨天
0
0
非常实用的IDEA插件之总结

1、Alibaba Java Coding Guidelines 经过247天的持续研发,阿里巴巴于10月14日在杭州云栖大会上,正式发布众所期待的《阿里巴巴Java开发规约》扫描插件!该插件由阿里巴巴P3C项目组研发。P3C...

Gibbons
昨天
1
0
Tomcat介绍,安装jdk,安装tomcat,配置Tomcat监听80端口

Tomcat介绍 Tomcat是Apache软件基金会(Apache Software Foundation)的Jakarta项目中的一个核心项目,由Apache、Sun和其他一些公司及个人共同开发而成。 java程序写的网站用tomcat+jdk来运行...

TaoXu
昨天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部