//枚举定义

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学习笔记之-枚举的更多相关文章

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

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

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

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

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

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

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

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

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

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

  6. CLR_Via_C#学习笔记之枚举

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

  7. swift学习笔记3——类、结构体、枚举

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  8. swift学习笔记5——其它部分(自动引用计数、错误处理、泛型...)

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

  9. swift学习笔记4——扩展、协议

    之前学习swift时的个人笔记,根据github:the-swift-programming-language-in-chinese学习.总结,将重要的内容提取,加以理解后整理为学习笔记,方便以后查询 ...

随机推荐

  1. Microsoft 2013 新技术学习笔记 二

    在探讨系统重构的代码结构组织之前,先初步考虑框架与数据库的交互,在.net平台上数据访问方案有人总结为三类:DataSet.ADO.net 2.0.ORM组件.我只熟悉ADO.NET方式,众多的企业特 ...

  2. Git使用总结

    一.Git的特性 Speed 速度(git是用c语言写的.一般都是提交到本地) Simple design Strong support for non-linear development (tho ...

  3. ASP.NET MVC 中如何用自定义 Handler 来处理来自 AJAX 请求的 HttpRequestValidationException 错误

    今天我们的项目遇到问题 为了避免跨站点脚本攻击, 默认我们项目是启用了 validateRequest,这也是 ASP.NET 的默认验证规则.项目发布后,如果 customError 启用了,则会显 ...

  4. java 去掉html标签

    使用正则表达式删除HTML标签. import java.util.regex.Matcher; import java.util.regex.Pattern; public class HTMLSp ...

  5. 解决两台centos虚拟机Telnet服务无法联机的问题

    关闭防火墙 [root@localhost ~]# service iptables stopiptables: Flushing firewall rules:                    ...

  6. 基于tiny4412的Linux内核移植 -- 设备树的展开

    作者信息 作者: 彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台简介 开发板:tiny4412ADK + S700 + 4GB Flash 要移植的内核版本 ...

  7. UITextField-secureTextEntry

    1.UITextFiled的密文输入   secureTextEntry  安全文本输入  secure:安全  Entry:入口

  8. [git]解决rebase冲突

    git pull --rebase时产生冲突 有三个选项: git rebase --skip 效果是:抛弃本地的commit,采用远程的commit(慎用因为你本地的修改就会都没有!) git re ...

  9. 性能测试类,让你写法代码养成经常测试的好习惯 -ASP.NET C#

    介绍: 可以很方便的在代码里循环执行 需要测试的函数  自动统计出执行时间,支持多线程. 使用方法: PerformanceTest p = new PerformanceTest(); p.SetC ...

  10. 【分享】iOS功能界面漂亮的弹出框

    STPopup 为 iPhone 和 iPad提供了 STPopupController UINavigationController 弹出的风格. 特性: Extend your view cont ...