swift2.0 学习笔记five


        

    //枚举

    enum CompassPoint {

        case North

        case South

        case East

        case West

    }

    //多个成员值可以出现在同一行上,用逗号隔开:

    enum fruit{

        case apple, melons ,tomato ,watermelon ,banana

    }

    var ff = CompassPoint.North

    

    //关联值(Associated Values)

    enum DLG{

        case NAME(String)

        case ADDRESS(Int,Int,Int)

    }

    

    

    var myDLG=DLG.NAME("dlg")

    override func viewDidLoad() {

        super.viewDidLoad()

        // C Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值。这些枚举成员本身 就是完备的值

        

        ff = .South

        switch ff {

        case .North:

            print("Lots of planets have a north")

        case .South:

            print("Watch out for penguins")

        case .East:

            print("Where the sun rises")

        case .West:

            print("Where the skies are blue")

            

        }//Watch out for penguins

        

        

        

        //定义一个DLG的枚举类型,它的一个成员值是具有String类型关联值的NAME,它的另一个成员值时具有(Int,Int,Int)类型关联值的ADDRESS

        

        myDLG=DLG.ADDRESS(10, 6, 9) //创建了一个名为myDLG的变量,并将DLG.ADDRESS赋值给它,关联的元组为(1069

        //在同一时间只能存储这两个值中 的一个

        switch myDLG{

        case .ADDRESS(let a, let b, let c):

            print("ADDRESS:  \(a),\(b),\(c).")

        case .NAME(let myname):

            print("NAME:  \(myname)")

        }//ADDRESS:  10,6,9.

        //如果一个枚举成员的所有关联值都被提取为常量,或者都被提取为变量,为了简洁可以只在成员名称前标注 一个let 或者var

        switch myDLG{

        case let.ADDRESS( a,  b,  c):

            print("ADDRESS:  \(a),\(b),\(c).")

        case .NAME(let myname):

            print("NAME:  \(myname)")

        }//ADDRESS:  10,6,9.

        

        

        //原始值(Raw Values)

        //原始值可以是字符串,字符,或者任意整型值或浮点型值。每个原始值在枚举声明中必须是唯一的。

        //原始值和关联值是不同的。原始值是在定义枚举时被预先填充的值,对于一个特定的枚 举成员,它的原始值始终不变。关联值是创建一个基于枚举成员的常量或变量时才设置的值,枚举成员的关联值 可以变化。

        enum plant : Int{

            case MMM=1, NNN,YYY,ZZZ

        }

        let aaa=plant.NNN

        print(aaa.rawValue) //2

        //使用枚举成员的 rawValue 属性可以访问该枚举成员的原始值:

        let bbb=plant(rawValue: 3)!//原始值构造器,返回值则是枚举成员或nil

        print(bbb)//YYY

        

        

        

        //计算 (5+2)*4

        let myfive = Arithmetic.Number(5)

        let mytwo = Arithmetic.Number(2)

        let myfour = Arithmetic.Number(4)

        let myadd = Arithmetic.Add(myfive, mytwo)

        let mymult = Arithmetic.Multiplic(myadd, myfour)

        print(mymult)

        //Multiplic(

        //swift测试.ViewController.Arithmetic.Add(

        //swift测试.ViewController.Arithmetic.Number(5),

        //swift测试.ViewController.Arithmetic.Number(2)

        //                                       ),

        //swift测试.ViewController.Arithmetic.Number(4)

        //)

        let result = evaluate(mymult)

        print(result)//28

        

        

    }

    //递归枚举

    //递归枚举(recursive enumeration)是一种枚举类型,它有一个或多个枚举成员使用该枚举类型的实例作为关联值。使用递归枚举时,编译器会插入一个间接层。你可以在枚举成员前加上 indirect 来表示该成员可递归。

    //枚举类型开头加上 indirect 关键字来表明它的所有成员都是可递归的

    indirect enum Arithmetic{

        case Number(Int)

        case Add(Arithmetic,Arithmetic)

        case Multiplic(Arithmetic,Arithmetic)

    }

    

    func evaluate(exp:Arithmetic)->Int{

        switch exp

        {

        case .Number(let value):

            return value

        case .Add(let oneArithmetic, let twoArithmetic):

            return evaluate(oneArithmetic) + evaluate(twoArithmetic)

        case .Multiplic(let oneArithmetic, let twoArithmetic):

            return evaluate(oneArithmetic) * evaluate(twoArithmetic)

        }

        

    }

    

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值