swift学习笔记之-枚举
//枚举定义
import UIKit
//枚举定义 (枚举、结构体、类的名字首字母必须大写,表示为定义了新的类型)
/*枚举为一组相关的值定义了一个共同的类型,使你可以在你的代码中以类型安全的方式来使用这些值。枚举成员可以指定任意类型的关联值存储到枚举成员中
枚举类型是一等(first-class)类型。它们采用了很多在传统上只被类(class)所支持的特性,例如计算型属性(computed properties),用于提供枚举值的附加信息,实例方法(instance methods),用于提供和枚举值相关联的功能。枚举也可以定义构造函数(initializers)来提供一个初始值;可以在原始实现的基础上扩展它们的功能;还可以遵守协议(protocols)来提供标准的功能
递归(indirect)枚举:递归枚举(recursive enumeration)是一种枚举类型(嵌套),它有一个或多个枚举成员使用该枚举类型的实例作为关联值。使用递归枚举时,编译器会插入一个间接层。你可以在枚举成员前加上indirect来表示该成员可递归
*/
enum Barcode {
case UPCA(Int, Int, Int, Int)
case QRCode(String)
}
//定义一个名为Barcode的枚举类型,它的一个成员值是具有(Int,Int,Int,Int)类型关联值的UPCA,另一个成员值是具有String类型关联值的QRCode。”
//这个定义不提供任何Int或String类型的关联值,它只是定义了,当Barcode常量和变量等于Barcode.UPCA或Barcode.QRCode时,可以存储的关联值的类型。
enum Planet{
case qiuti(String,String,String)
case canshu([Int],String)
}
let wt1 = Planet.qiuti("diqiu", "yueqiu", "taiyang")
let wt2 = Planet.canshu([1,2,3,4], "数据")
switch wt2{
case .qiuti(let a,let b,let c): //将值绑定给常量或变量
print("\(a)、\(b)、\(c)")
case let .canshu(array,str): //声明关键字let、var可前置
print("\(array)、\(str)")
}
//=====================================================
enum Name:Int{
case menber1 = 1,menber2,menber3 //原始值的隐式赋值
case menber4,menber5
}
//枚举成员原始值:rawValue,若为Int枚举其成员默认rawValue为0,1,2...,若为String则为成员名字
var meijushili = Name.menber1
meijushili = .menber5
var c = meijushili.rawValue
print(c) //c = 5
var m = Name(rawValue: 2) //m = Name.menber2,返回的是可选的枚举类型,原始值构造器是一个可失败构造器
print(m)
//======================================================
//枚举类型应用:计算表达式的值,如: (3+5)*(11-9)
indirect enum Jisuan { //外置indirect 关键字表示该枚举的所有成员均可递归(嵌套),内置则指定某成员可递归
case number(Int)
case jiafa(Jisuan,Jisuan)
case jianfa(Jisuan,Jisuan)
case chengfa(Jisuan,Jisuan)
case chufa(Jisuan,Jisuan)
}
func kaishi(suanfa:Jisuan)->Int{
switch suanfa{
case .number(let a):
return a
case .jiafa(let left, let right):
return kaishi(left) + kaishi(right)
case .jianfa(let left, let right):
return kaishi(left) - kaishi(right)
case .chengfa(let left, let right):
return kaishi(left) * kaishi(right)
case .chufa(let left, let right):
return kaishi(left) / kaishi(right)
}
}
//var a = Jisuan.number(15)
var sumjiafa = Jisuan.jiafa(.number(3), .number(5)) //3+5
var sumjianfa = Jisuan.jianfa(.number(11), .number(9)) //11-9
var sumchengfa = Jisuan.chengfa(sumjiafa, sumjianfa) //(3+5)*(11-9) = 16
var sumchufa = Jisuan.chufa(sumchengfa, sumjiafa) //(3+5)*(11-9)/(3+5) = 2
var sum1 = kaishi(sumchengfa)
var sum2 = kaishi(sumchufa)
print(sum1)
print(sum2)
swift学习笔记之-枚举的更多相关文章
- Swift学习笔记 - 位移枚举的按位或运算
在OC里面我们经常遇到一些枚举值可以多选的,需要用或运算来把这些枚举值链接起来,这样的我们称为位移枚举,但是在swift里面却不能这么做,下面来讲解一下如何在swift里面使用 OC的位移枚举的区分 ...
- Swift学习笔记(10)--枚举
1.定义语法: enum SomeEnumeration { // enumeration definition goes here } 2.使用 enum CompassPoint { case N ...
- Swift 学习笔记 enum 枚举类型
异端,异端啊,我感觉这是map吧? enum ATMStatus { case Success(Int) case Error(String) } func withdraw(amount: Int) ...
- 【swift学习笔记】二.页面转跳数据回传
上一篇我们介绍了页面转跳:[swift学习笔记]一.页面转跳的条件判断和传值 这一篇说一下如何把数据回传回父页面,如下图所示,这个例子很简单,只是把传过去的数据加上了"回传"两个字 ...
- Swift学习笔记(一)搭配环境以及代码运行成功
原文:Swift学习笔记(一)搭配环境以及代码运行成功 1.Swift是啥? 百度去!度娘告诉你它是苹果最新推出的编程语言,比c,c++,objc要高效简单.能够开发ios,mac相关的app哦!是苹 ...
- CLR_Via_C#学习笔记之枚举
CLR_Via_C#学习笔记之枚举 枚举类型(Enum)定义的一组"符号名称/值"配对:因为枚举类型使用程序更容易编写.阅读和维护,而且它是强类型: 枚举是值类型:由System. ...
- swift学习笔记3——类、结构体、枚举
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
- swift学习笔记4——扩展、协议
之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...
随机推荐
- UML2
UML中有3种构造块:事物.关系和图,事物是对模型中最具有代表性的成分的抽象:关系是把事物结合在一起:图聚集了相关的的事物.具体关系图标如下 说明:构件事物是名词,是模型的静态部分.行为事物是动态部分 ...
- POJ 2234 Matches Game
Matches Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 7567 Accepted: 4327 Desc ...
- Ubuntu中QT使用FFmpeg的奇怪问题
FFmpeg都已经编译安装好了,QT的程序中调用av_register_all却总是在链接阶段报错,经过长时间的摸索,发现时静态链接库的问题,网上给出的答案都只能解决部分问题,所需的全部链接库如下: ...
- 使用NPOI导出excel
NPOI下载地址http://npoi.codeplex.com/releases 从项目中引用NPOI.bll和NPOI.OOXML.bll 引用命名控件 using NPOI.HSSF.UserM ...
- codeforce No to Palindromes!(枚举)
/* 题意:给定一个字符串中没有任何长度>1的回文子串!求按照字典序的该串的下一个字符串 也不包含长度>1的任何回文子串! 思路:从最低位进行枚举,保证第i位 不与 第 i-1位和第 i- ...
- [转载]SharePoint 2013测试环境安装配置指南
软件版本 Windows Server 2012 标准版 SQL Server 2012 标准版 SharePoint Server 2013 企业版 Office Web Apps 2013 备注: ...
- css中filter:alpha透明度使用
css中filter:alpha透明度使用 使用filter可以设置透明度,filter:alpha在IE下是没有问题的,要支持firefox就需要使用-moz-opacity,下面有个不错的示 ...
- EF封装类 增加版,增加从缓存中查找数据方法,供参考!
EF封装类 增加版,增加从缓存中查找数据方法,供参考! 这个类是抽象类,我这里增加了需要子类验证的方法ValidateEntity,方便扩展,若想直接使用该类,可以将该类更改成静态类,里面所有的方法都 ...
- HTTP Cookie/Session
一.HTTP协议 HTTP协议是一个无状态协议,服务器无法判断若干个请求是否来自同一个浏览器,无法与浏览器进行会话. 二.HTTP会话控制:Cookie Cookie技术是使用在浏览器端的一种缓存技术 ...
- POI中getLastRowNum() 和getLastCellNum()的区别 hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1
hssfSheet.getLastRowNum();//最后一行行标,比行数小1 hssfSheet.getRow(k).getLastCellNum();//获取列数,比最后一列列标大1