Swift_枚举


点击查看源码

空枚举

//空枚举
enum SomeEnumeration {
// enumeration definition goes here
}

枚举基本类型

//枚举基本类型
enum CompassPoint {
case north
case south
case east
case west
}

简写

//简写
enum Planet {
case mercury, venus, earth, mars, jupiter, saturn, uranus, neptune
}

枚举语法

//枚举语法
func testEnumerationSyntax() { //使用
var directionToHead = CompassPoint.west
//可不写 前面的枚举名
directionToHead = .east
print("\(directionToHead)") /* print east */
}

枚举匹配

//枚举匹配
func testMatchingEnumeration() { var directionToHead = CompassPoint.south //if匹配
if directionToHead == CompassPoint.south {
directionToHead = .east
} //switch匹配
switch directionToHead {
case .north:
print("Lots of planets have a north")
case .south:
print("Watch out for penguins")
case .east:
print("Where the sun rises")
default:
print("default")
} /* print Where the sun rises */
}

关联值

//关联值
func testAssociatedValues() {
//枚举可以和结构体类型的数据关联使用
enum Barcode {
case upca(Int, Int, Int, Int)
case qrCode(String)
} // 初始化
var productBarcode = Barcode.upca(8, 85909, 51226, 3)
productBarcode = .qrCode("ABCDEFGHIJKLMNOP") //匹配
switch productBarcode {//有警告 要求是常数
case .upca(let numberSystem, let manufacturer, let product, let check):
print("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
case .qrCode(let productCode):
print("QR code: \(productCode).")
} //可以不写let
switch productBarcode {
case let .upca(numberSystem, manufacturer, product, check):
print("UPC-A: \(numberSystem), \(manufacturer), \(product), \(check).")
case let .qrCode(productCode):
print("QR code: \(productCode).")
} /* print QR code: ABCDEFGHIJKLMNOP.
QR code: ABCDEFGHIJKLMNOP. */
}

原始值

//原始值
func testRawValues() {
enum ASCIIControlCharacter: Character {
case tab = "\t"
case lineFeed = "\n"
case carriageReturn = "\r"
} //隐式分配原始值
enum Planet: Int {
case mercury = 1, venus, earth, mars, jupiter, saturn, uranus, neptune
} //原始值为属性名转换
enum CompassPoint: String {
case North, South, East, West
} print("\(Planet.earth.rawValue)")
print("\(CompassPoint.West.rawValue)") // 通过原始值初始化
let possiblePlanet = Planet(rawValue: 7)
print("\(possiblePlanet)")
let positionToFind = 9
print("\(possiblePlanet)") // 当原始值不匹配时,返回为nil
if let somePlanet = Planet(rawValue: positionToFind) {
switch somePlanet {
case .earth:
print("Mostly harmless")
default:
print("Not a safe place for humans")
}
} else {
print("There isn't a planet at position \(positionToFind)")
} /* print 3
West
Optional(Swift_枚举.(testRawValues () -> ()).(Planet #1).uranus)
Optional(Swift_枚举.(testRawValues () -> ()).(Planet #1).uranus)
There isn't a planet at position 9 */
}

枚举循环

//枚举循环
func testRecursiveEnumerations() {
//indirect循环关键字
// enum ArithmeticExpression {
// case Number(Int)
// indirect case Addition(ArithmeticExpression, ArithmeticExpression)
// indirect case Multiplication(ArithmeticExpression, ArithmeticExpression)
// } // 可将indirect写到枚举前
indirect enum ArithmeticExpression {
case number(Int) // 值
case addition(ArithmeticExpression, ArithmeticExpression) // 加
case multiplication(ArithmeticExpression, ArithmeticExpression) // 乘
} // 函数使用
func evaluate(_ expression: ArithmeticExpression) -> Int {
switch expression {
case .number(let value):
return value
case .addition(let left, let right):
return evaluate(left) + evaluate(right)
case .multiplication(let left, let right):
return evaluate(left) * evaluate(right)
}
} // evaluate (5 + 4) * 2
let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)
let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))
print(evaluate(product)) /* print 18 */
}

Swift_枚举的更多相关文章

  1. swift_枚举 | 可为空类型 | 枚举关联值 | 枚举递归 | 树的概念

    ***************可为空的类型 var demo2 :we_demo = nil 上面这个代码串的语法是错的 为什么呢, 在Swift中,所有的类型定义出来的属性的默认值都不可以是nil ...

  2. 学习swift从青铜到王者之swift枚举07

    空枚举 //空枚举 enum SomeEnumeration { // enumeration definition goes here } 枚举基本类型 //枚举基本类型 enum CompassP ...

  3. Swift_错误处理

    Swift_错误处理 点击查看源码 //错误处理 func test() { //错误枚举 需ErrorType协议 enum ErrorEnum: Error { case `default` // ...

  4. Swift_初始化

    #Swift_初始化 点击查看源码 初始化结构体 //初始化结构体 func testInitStruct() { //结构体 类中默认方法 struct Size { //宽 var width = ...

  5. Swift_方法

    Swift_方法 点击查看源码 ///方法 class Methods: NSObject { func test() { // self.testInstanceMethods() //实例方法 s ...

  6. Swift_类和结构体

    Swift_类和结构体 点击查看源码 struct Resolution { var width = 0 var height = 0 } class VideoMode { var resoluti ...

  7. Swift enum(枚举)使用范例

    //: Playground - noun: a place where people can play import UIKit var str = "Hello, playground& ...

  8. 编写高质量代码:改善Java程序的151个建议(第6章:枚举和注解___建议88~92)

    建议88:用枚举实现工厂方法模式更简洁 工厂方法模式(Factory Method Pattern)是" 创建对象的接口,让子类决定实例化哪一个类,并使一个类的实例化延迟到其它子类" ...

  9. Objective-C枚举的几种定义方式与使用

    假设我们需要表示网络连接状态,可以用下列枚举表示: enum CSConnectionState { CSConnectionStateDisconnected, CSConnectionStateC ...

随机推荐

  1. css之表格,表单

    一.表格 1.定义 表格由<table>标签来定义.每个表格均有若干行(由tr标签定义),每行被分割为若个单元格(由td标签定义).字母td指表格数据(table data),即数据单元格 ...

  2. java反射机制的简单介绍

    参考博客: https://blog.csdn.net/mlc1218559742/article/details/52754310 先给出反射机制中常用的几个方法: Class.forName (& ...

  3. QML Delegate中访问该持有者的方式 附加属性(转载)

    http://blog.csdn.net/yuxiaohen/article/details/17226971   用法很奇葩记录一下,实测可以,用于弱化delegate与持有者的依赖 delegat ...

  4. 关于单一网络适配器拓扑TMG

    单网络适配器拓扑的功能 在单网络适配器拓扑中可以实现有限的 Forefront TMG 功能,其中包括: 针对 HTTP.HTTPS 和 CERN 代理 FTP 的正向 (CERN) 代理(仅限下载) ...

  5. ue-edit设置显示函数列表

    UltraEdit的函数列表竟然不显示函数,那这功能要它何用,应该如何才能让函数显示出来呢? 公司编程基本上都在UltraEdit中进行,俺刚来公司还不熟悉,今天装了个UltraEdit,可是看着别人 ...

  6. MySQL闪回-binlog2sql

    功能 提取SQL 生成回滚SQL     限制: mysql server必须开启,离线模式下不能解析binlog. binlog格式必须是row模式. flashback模式只支持DML,DDL将不 ...

  7. 鉴定JavaScript中的数据类型

    众所周知,JavaScript是一门弱类型的语言,但是这并不代表JavaScript中没有数据类型.JavaScript中常见的数据类型有string.number.object等等,通常我们使用ty ...

  8. O(1) 和 O(n) 的区别

    举个简单的例子,要从0加到n,我们会这么写:int sum = 0;for(int i = 0; i<=n; ++i){   sum += i;}一共算了n次加法,那么就说这个时间复杂度是O(n ...

  9. 有趣的IntegerCache

    一个很有趣的现象,下面这两个结果输出的结果是false true,这是为什么?   翻看Integer的源码可以看到,当new Integer(12);时,没有什么特别的,就是通过构造方法创建了一个I ...

  10. springmvc使用map接收form表单的参数

    其实只需要在map前面加上@RequestParam参数即可,jsp的name等都不变 public String queryByCondition(@RequestParam Map<Stri ...