• Swift -- 7.2 枚举


    定义枚举类型

    coc的枚举不同,swift的枚举成员不会被分配一个默认的整数值。

    也就是说,swift的枚举名本身就代表了一个枚举实例,对应一个枚举值,与整数值没有任何关系

    enum WeakDay2

    {

        case Monday

        case Tuesday

        case Wednesday

        case Thursday

        case Friday

        case Saturday

        case Sunday

    }

    enum WeakDay

    {

        case Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, Sunday

    }

    var day : WeakDay

    day = WeakDay.Sunday

    day =  .Wednesday//当程序可以推断出变量的枚举类型时,swift允许省略枚举值前面的枚举名前缀

    print(day)

    枚举值和switch语句

    var chooseDay = WeakDay.Saturday

    switch chooseDay

    {

    case .Monday:

        print("monday")

    default:

        print("non")

    }

    赋予枚举原始值

    如果枚举的类型为Int,赋予原始值的时候程序可以自动推断,类型为String的时候程序不能自动推断,必须给每个枚举指定原始值

    enum Season : Character

    {

        case Spring = "s"

        case Summer = "u"

    }

    var mySeason = Season(rawValue: "s")

    if mySeason != nil

    {

        switch mySeason!

        {

        case .Spring:

            print("spring")

        case .Summer:

            print("summer")

        }

    }

    构造器

    var daya = Season.Spring

    print(".Spring的原始值为:(daya.rawValue)")//获取枚举的原始值

    daya = .Summer

    print(".Summer的原始值为:(daya.rawValue)")

    var mySeaxon = Season(rawValue: "s")//使用原始值来获取枚举,可能返回nil,这里返回的是可选类型

    if mySeason != nil

    {

        switch(mySeason!){//需要使用!来进行强制解析

        case .Spring:

            print("s")

        case .Summer:

            print("u")

        }

    }

     

    关联值

    enum Planet

    {

        case Mercury(Weight:Double, density:Double, name:String)

        case Venus(Double, Double)

        case Earth(Double, String)

        case Mars(density:Double, name:String)

        case Jupiter

        case Saturn

        case Uranus

        case Nepturn

    }

    var p1 = Planet.Mercury(Weight: 0.05, density: 5.43, name: "水星")

    var p2 = Planet.Venus(0.815, 5.25)

    var p3 = Planet.Earth(1.0, "地球")

    var p4 = Planet.Mars(density: 3.95, name: "水星")

    switch(p3)

    {

    case Planet.Earth(var weight, var name):

        print("(weight)(name)")

    default:

        break

    }

    switch(p1)

    {

    case let .Venus(weight, density):

        print("(weight)(density)")

    case let .Mercury(Weight:w, density:d, name:n):

        print("(n)")

    default:

        break

    }

    枚举这里写了这么多,几乎全都是和switch语句一起用的

    根据自己写代码的经验,所以枚举就是用来和switch结合的,来省略繁琐的if判断

    所以面向对象的三大特性,封装,继承,多态应该可以实现

    面向对象的五大操作方式:

    声明变量  可以

    创建实例 只能使用定义枚举时定义好的实例什么的,感觉有点别扭

    访问类型属性 可以

    调用类型方法 可以

    派生子类,不是很清楚啊

  • 相关阅读:
    LINQ学习系列-----1.3 扩展方法
    表单重复提交的三种情况及解决办法
    JDBC的简单封装
    Java学习路线图
    成为一名Java高级工程师你需要学什么
    站在烦恼里仰望幸福
    如何发布Web项目到互联网
    用户管理的设计--2.新增用户信息实现
    MD5加密工具
    springMvc注解之@ResponseBody和@RequestBody
  • 原文地址:https://www.cnblogs.com/chebaodaren/p/5590956.html
Copyright © 2020-2023  润新知