zoukankan      html  css  js  c++  java
  • 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判断

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

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

    声明变量  可以

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

    访问类型属性 可以

    调用类型方法 可以

    派生子类,不是很清楚啊

  • 相关阅读:
    [图解算法] 最短路径算法之 “Dijikstra”
    [前端随笔][CSS] 伪类的应用
    [前端随笔][JavaScript] 实现原生的事件监听<Vue原理>
    [图解算法] 最短路径算法之 “Floyd”
    [前端随笔][JavaScript][自制数据可视化] “中国地图”
    [前端随笔][JavaScript] 懒加载的实现(上划一次加载一部分)
    [前端随笔][CSS] 制作一个加载动画 即帖即用
    ThinkPHP下隐藏index.php以及URL伪静态
    PHP基础语法3
    PHP基础语法2
  • 原文地址:https://www.cnblogs.com/chebaodaren/p/5590956.html
Copyright © 2011-2022 走看看