美文网首页
5.2 枚举

5.2 枚举

作者: LucXion | 来源:发表于2020-05-26 18:06 被阅读0次
枚举值基础语法与调用
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)

枚举得到了扩展,可以定义成任意类型,除了初始值还可以使用相关值,通过相关值和枚举外的函数实现来实现递归枚举

相关文章

  • 5.2 枚举

    枚举值自定义类型及在switch结构中的应用 递归函数就是在函数内部进行了此函数本身的调用。读者需要注意一点,递归...

  • Swift5.2-枚举

    一、声明 内容仅作为博主个人学习的一个总结输出,仅供参考,若对你产生了一丝帮助,荣幸之至。 二、定义 枚举类型是为...

  • 5.2 给枚举类型添加方法 [Swift教程]

    1. 不同于传统的枚举类型,你可以给枚举添加方法。本节课将讲解枚举方法的使用。 2. 使用相同的方式,定义另一个枚...

  • Swift 5.2 的几个新特性

    Swift 5.2 的几个新特性Swift 5.2 的几个新特性

  • 【47】日思录

    5.2~5.5 5.2 1.扩积极词汇 If something beckons, it is so attrac...

  • 5.2

    5.2

  • C#枚举及与枚举常数的转换

    1、枚举的定义 2、枚举绑定到comboBox 3、枚举常数转换为枚举string转枚举 数字值转枚举

  • [ISUX译]iOS 9 人机界面指南(五):图标与图形设计

    文章索引 5.1 图标与图像尺寸(IconandImageSizes) 5.2 应用图标(AppIcon) 5.2...

  • Swift 基础笔记 - 枚举

    枚举 OC定义和使用枚举 Swift定义枚举类型 Swift判断枚举类型 枚举成员类型

  • 枚举类

    1.枚举类型的定义: 枚举类型定义的一般形式为 enum 枚举名{//枚举值表枚举值1;枚举值2;...} 在枚举...

网友评论

      本文标题:5.2 枚举

      本文链接:https://www.haomeiwen.com/subject/ixdvahtx.html