美文网首页
Swift枚举

Swift枚举

作者: Rokkia | 来源:发表于2016-07-05 22:18 被阅读14次

    1.枚举型个人理解
    枚举在各种语言中都可以看得到,swift也不会错过,那么枚举能做什么呢,简单来说,枚举可以表示有限种属性\状态的事务。如一个方向,可以分为东、西、南、北 ;成绩可分为�不及格、及格、良、优等

    2.枚举型创建
    下面说一下怎么使用,使用很简单

    enum Season {
        case Spring 
        case Summer 
        case Autumn 
        case Winter
    }
    

    这样就创建了一个Season的枚举类型,当然还有一种省去case的书写方法

    enum Season {
        case Spring ,Summer ,Autumn , Winter
    }
    

    这样用","来代替case也是可以的 但是这里有一个注意 就是当你的枚举值很多的时候 ,还是推荐使用功能上面的创建方式 ,这样可以让代码更加清晰

    3.枚举型的使用
    创建完成后怎么使用,因为enum是一种结构体,这样他的使用方法就跟一般都的结构体使用方式一样

    let seasonInYear = Season.Spring
    

    这样就隐式创建了一个Season类型的seasonInYear,同样我们可以显示创建一个Season类型 如:

    let seasonInYear:Season = .Spring
    

    因为我们显示声明了seasonInYear是Season类型,所以我们在后面进行赋值的时候直接用.Spring 代替Season.Spring,这一特点在后面我们也会用到

    有另外一个枚举值来存储四个季节对应的花 //迎春花,荷花,菊花,梅花

    enum Flower {
        case primroses,lotus,chrysanthemums,plumBlossom
    }
    

    创建一个方法 ,当你传入一个季节后,返回对应季节的花

    func flowerInSeason(season:Season)->Flower{
        switch season {
        case .Spring:
            return .Primroses
        case .Summer:
            return .Lotus
        case .Autumn:
            return .Chrysanthemums
        case .Winter:
            return .PlumBlossom
        }
    }
    

    这里我们也用到了刚才说到的 ,当你确定一个变量是明确的某个enum类型的时候 可以只输入".enumName"来缩写

    4.RawValue
    下面说一下raw Value的问题 就是可以在创建枚举类型的时候 对枚举值赋予初始值 如:

    enum Season :Int{
        case Spring = 1 
        case Summer 
        case Autumn 
        case Winter
    }
    

    这样你可以通过seasonInYear.rawValue来获取到对应的初始值
    这里有必要说明一下,当你定义初始值类型为Int时,当你给Spring赋值为1时,默认Summer为2,Autumn为3...

    enum Season :Int{
        case Spring = 1 
        case Summer 
        case Autumn = 5
        case Winter
    }
    

    假如我设置Autumn为5时Winter为多少呢,大家可以试一下 ,不出意外是6
    我们知道了通过枚举值获取到对应的rawValue ,那我们如何通过rawValue获取到对应的枚举值呢

     let seasonInYear = Season.init(rawValue:6)
    

    这样我们就得到了Season.Winter 如果你输入的是7结果会怎样呢 所以方法返回的是一个Optional 这里需要注意哦 !

    5.AssociateValue
    关联值的使用时很有意思的,在初始化的时候并不给其赋值,但是在程序执行中可以对其进行赋值
    如你想知道你的考试有没有及格 同事还想知道你的分数 ,让我们来模拟一下

    enum Achievement {
        case Pass(Double)
        case Failed(Double)
    }
    

    这时候我们就创建了 Pass 和Failed分别是(Double)类型的关联值
    下面我们创建一个方法根据分数返回枚举值

    func achievementWithScore(score:Double)->Achievement{
        if  score >= 60 {
            return .Pass(score)
        }else{
            return .Failed(score)
        }
    }
    

    然后在创建一个方法来打印你的结果和分数

    func yourAchievement(achievement:Achievement){
        switch achievement {
         //这里需要注明  你不能确定你的score是一定有值得  也可能是一个nil所以你需要先解包才可以
        case let .Pass(score):
            print("you are pass your score is \(score)")
        case let .Failed(score):
            print("you are failed your score is \(score)")
        }
    }
    

    然后试用一下看一下效果

    let yourScore = achievementWithScore(70)
    yourAchievement(yourScore)
    let yourScore1 = Achievement.Pass(80)
    yourAchievement(yourScore1)
    

    需要注意的是关联值 与RawValue不能同时声明 ,否则会报错

    最后说一下swift中的枚举大Bug 在我看来是Bug 就是枚举里面可以有方法
    让我们来改变一下前面,通过季节 获取到对应季节的花的枚举类型

    enum Season {
        case Spring ,Summer ,Autumn , Winter
        func flowerInSeason()->Flower{
            switch self {
            case .Spring:
                return .Primroses
            case .Summer:
                return .Lotus
            case .Autumn:
                return .Chrysanthemums
            case .Winter:
                return .PlumBlossom
            }
        }
    }
    

    这里使用到了self self可以理解为指向自己的指针

    最后说一下
    枚举是值类型!!
    枚举是值类型!!
    枚举是值类型!!

    相关文章

      网友评论

          本文标题:Swift枚举

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