枚举:功能是用来进行数据的描述
区别于函数的作用
- 1.为枚举类型指定一个原始值类型
import UIKit
/*
枚举:功能是用来进行数据的描述
*/
//1.为枚举类型指定一个原始值类型
enum CharEnum : Character {
case a = "A"
case b = "B"
case c = "C"
case d = "D"
}
- 2.原始类型为Int, 可以只设置第一个枚举值的原始值
//2.原始类型为Int, 可以只设置第一个枚举值的原始值
enum IntEnum : Int {
case 一 = 1
case 二
case 三
case 四
}
- 3.通过rawValue属性来获取枚举的原始值
//创建枚举变量
var char = CharEnum.a
print(char)
//3.通过rawValue属性来获取枚举的原始值
var rawValue = char.rawValue
print(rawValue)
- 4.枚举的相关值
//4.枚举的相关值
enum Shape {
//圆形:设置圆心和半径
case circle(center:(Double,Double), radius:Double)
//矩形:设置中心,宽,高
case rect(center:(Double,Double), width:Double, height:Double)
}
//创建圆形枚举实例
var circle = Shape.circle(center: (0,0), radius: 3)
//创建矩形枚举实例
var rect = Shape.rect(center: (0, 1), width: 10, height: 20)
//写一个函数,参数为Shape枚举类型
func shapeFunc(param: Shape) {
switch param {
case let .circle(center, radius):
print("此圆的圆心为:\(center), 半径为\(radius)")
case let .rect(center, width, height):
print("此矩形的圆心为:\(center), 宽为\(width),高为\(height)")
}
}
shapeFunc(param: circle)
shapeFunc(param: rect)
//打印:此圆的圆心为:(0.0, 0.0), 半径为3.0
//打印:此矩形的圆心为:(0.0, 1.0), 宽为10.0,高为20.0
- 5.递归枚举
//5.递归枚举
func mathFunc(param: Int) -> Int {
let temp = param - 1
if temp > 0 {
//递归
return mathFunc(param: temp) * param
}else{
return 1
}
}
//测试
var result = mathFunc(param: 5)
print(result)
//打印:120 (5! = 5*4*3*2*1 = 120)
- 6.indirect关键字之
枚举
//6.indirect关键字
enum Expression {
//描述单个数字
case num(param:Int)
//表示加法运算,将Expression作为相关值参数类型
indirect case add(param1: Expression,param2:Expression)
//表示减法运算
indirect case sub(param1: Expression,param2:Expression)
//表示乘法运算
indirect case mul(param1: Expression,param2:Expression)
//表示除法运算
indirect case div(param1: Expression,param2:Expression)
}
//应用:使用Expression枚举来描述复合表达式: ((5+5)*2-8)/2
//创建单值5
var num5 = Expression.num(param: 5)
//进行表达式5+5的描述
var exp1 = Expression.add(param1: num5, param2: num5)
//创建单值2
var num2 = Expression.num(param: 2)
//进行表达式(5+5)*2的描述
var exp2 = Expression.mul(param1: exp1, param2: num2)
//创建单值8
var num8 = Expression.num(param: 8)
//进行表达式(5+5)*2-8的描述
var exp3 = Expression.sub(param1: exp2, param2: num8)
//进行表达式((5+5)*2-8)/2的描述
var expFinal = Expression.div(param1: exp3, param2: num2)
实际应用:
//实现一个函数来进行四则混合运算
func expressionFunc(param: Expression) -> Int {
switch param {
case let .num(param):
return param
case let .add(param1, param2):
return expressionFunc(param: param1) + expressionFunc(param: param2)
case let .sub(param1, param2):
return expressionFunc(param: param1) - expressionFunc(param: param2)
case let .mul(param1, param2):
return expressionFunc(param: param1) * expressionFunc(param: param2)
case let .div(param1, param2):
return expressionFunc(param: param1) / expressionFunc(param: param2)
}
}
//调用函数
var expResult = expressionFunc(param: expFinal)
print(expResult)
//打印:6
网友评论