枚举值基础语法与调用
enum Name:Int {
case a = 0
case d = 1
}
var person = Name.a // a
var person1:Name = .a // a
var realValue = Name.a.rawValue // 需要设置枚举类型 且 初始化后可以 才可以调用
// 通过原始值获取枚举值
var d = Name(rawValue: 1) // 只需要规定枚举类型就可以调用
枚举值自定义类型及在switch结构中的应用
// 枚举值类型的扩展、使用的相关语法
enum Shape {
// 圆
case Circle (center:(Double,Double),r:Double)
// 方
case Rect (point:(Double,Double),width:(Double),height:(Double))
}
///四舍五入 到小数点后某一位
func roundTo(parama:Double, places: Int) -> Double {
let divisor = pow(10.0, Double(places))
return (parama * divisor).rounded() / divisor
}
///截断 到小数点后某一位
func truncate(_ parama:Double,_ places: Int) -> Double {
let divisor = pow(10.0, Double(places))
return Double(Int(parama * divisor)) / divisor
}
func area(parama:Shape)->Double {
switch parama {
case let .Circle(center, r):
let area = truncate(r*r*Double.pi, 2)
print("x = \(center.0),y = \(center.1)")
print("area = \(area)");
case let .Rect(point, width , height):
let area = truncate(width*height,2)
print("x = \(point.0),y = \(point.1)")
print("area = \(area)")
}
return 0
}
var circle = Shape.Circle(center: (100, 100), r: 100)
var rect:Shape = .Rect(point: (50,50), width: 100, height: 50)
area(parama: circle)
递归函数就是在函数内部进行了此函数本身的调用。读者需要注意一点,递归算法效率十分高,但是其性能资源的耗费也十分严重。在大多数情况下,开发者应该尽量避免使用递归。
递归枚举关键字 indirect
常用问题:阶乘、斐波那契数列(黄金分割数列)、杨辉三角取值、汉诺塔问题、二叉树深度
enum Expression {
case num(parama:Int)
indirect case add(parama1:Expression,parama2:Expression)
indirect case sub(parama1:Expression,parama2:Expression)
indirect case mul(parama1:Expression,parama2:Expression)
indirect case div(parama1:Expression,parama2:Expression)
}
//进行((5+6)*2-7)/3运算
var num2 = Expression.num(parama: 2)
var num3 = Expression.num(parama: 3)
var num5 = Expression.num(parama: 5)
var num6 = Expression.num(parama: 6)
var num7 = Expression.num(parama: 7)
var numAdd = Expression.add(parama1: num5, parama2: num6)
var numMul = Expression.mul(parama1: numAdd, parama2: num2)
var numSub = Expression.sub(parama1: numMul, parama2: num7)
var numDiv = Expression.div(parama1: numSub, parama2: num3)
func compose(parama:Expression)->Int {
switch parama {
case let .num(parama1):
return parama1
case let .add(parama1, parama2):
return compose(parama: parama1) + compose(parama: parama2)
case let .sub(parama1, parama2):
return compose(parama: parama1) - compose(parama: parama2)
case let .mul(parama1, parama2):
return compose(parama: parama1) * compose(parama: parama2)
case let .div(parama1, parama2):
return compose(parama: parama1) / compose(parama: parama2)
}
}
var result = compose(parama: numDiv)
枚举得到了扩展,可以定义成任意类型,除了初始值还可以使用相关值,通过相关值和枚举外的函数实现来实现递归枚举
网友评论