《Swift学习笔记》11 - 枚举的简单介绍

介绍:Swift 语言由苹果公司在 2014 年推出,用来撰写 Mac OS 和 iOS 应用程序,并且Swift还是开源的,开源地址:https://github.com/apple/swift,同时附上官方博客地址:https://swift.org
目前Swift已经发展到了第五版本。显然苹果大有推翻 OC “江山”的意思.
今天就来初探一下Swift,看看究竟为何swift有这么大的能力。
参考内容:
Swift中文
YungFan老师

swift
一、OC中的枚举:

(参考:iOS - OC Enum 枚举

  1. 样式枚举定义
  • 定义枚举类型
    /*
        typedef enum new;

        new:枚举类型的变量值列表

        C 样式的枚举默认枚举类型变量值的格式为整型
    */

    typedef enum {

        AA,
        BB,
        CC

    } Name;
  • 判断枚举值
- (void)studentWithName:(Name)name {

        switch (name) {

            case 0:

                NSLog(@"AA");
                break;

            case 1:

                NSLog(@"BB");
                break;

            case 2:

                NSLog(@"CC");
                break;

            default:
                break;
        }
    }
  • 设置枚举的值
[self studentWithName:1];

[self studentWithName:CC];

2.数字型枚举定义

  • 定义枚举
       /*
        typedef NS_ENUM(_type, _name) new;                      

        _type:枚举类型变量值的格式或者类型
        _name:枚举类型的名字
        new:枚举类型的变量值列表
    */

    typedef NS_ENUM(NSUInteger, Seasons) {

        spring = 0,
        summer,
        autumn,
        winter
    };
  • 判断枚举值
    - (void)selectWithSeasons:(Seasons)seasons {

        if (seasons == 1 || seasons == 2) {

            NSLog(@"comfortable");

        } else {

            NSLog(@"cold");
        }
    }
  • 设置枚举的值
[self selectWithSeasons:0];

[self selectWithSeasons:autumn];
  1. 位移型枚举
  • 使用 按位或 可以给一个参数同时设置多个 "类型"。在具体执行的时候,使用 按位与 可以判断具体的 "类型"。
  • OC 中 64 位操作系统 NSInteger 64 位 - long ⇒ 能够表示 64 种选项。通过位移设置,就能够得到非常多的组合。
  • 对于位移枚举类型,如果传入 0,表示什么附加操作都不做!=> 执行效率是最高的。如果开发中,看到位移的枚举,同时不要做任何的附加操作,参数可以直接输入 0!
  1. 定义枚举
      /*
        typedef NS_OPTIONS(_type, _name) new;

        _type:枚举类型变量值的格式
        _name:枚举类型的名字
        new:枚举类型的变量值列表

        位移的枚举判断不能使用 else,否则会丢选项
    */

    typedef NS_OPTIONS(NSUInteger, ActionTypeOptions) {

        ActionTypeTop =     1 << 0,
        ActionTypeBottom =  1 << 1,
        ActionTypeLeft =    1 << 2,
        ActionTypeRight =   1 << 3
    };
  • 判断枚举值
    - (void)movedWithActionType:(ActionTypeOptions)type {

        if (type == 0) {
            return;
        }

        if (type & ActionTypeTop) {
            NSLog(@"上 %li", type & ActionTypeTop);
        }
        if (type & ActionTypeBottom) {
            NSLog(@"下 %li", type & ActionTypeBottom);
        }
        if (type & ActionTypeLeft) {
            NSLog(@"左 %li", type & ActionTypeLeft);
        }
        if (type & ActionTypeRight) {
            NSLog(@"右 %li", type & ActionTypeRight);
        }
    }
  • 设置枚举的值
    [self movedWithActionType:0];

    [self movedWithActionType:ActionTypeLeft | ActionTypeTop | ActionTypeBottom | ActionTypeRight];
二、Swift中枚举的:
  1. 介绍:
    • 枚举为一组相关值定义了一个通用类型,从而可以让你在代码中类型安全地操作这些值。
    • 枚举为提供的类型很多,如:Int、Double、String等等;不必为单一的类型。
  2. 枚举的声明:
    enum关键字来定义一个枚举,然后将其所有的定义内容放在一个大括号( {})
  • 语法:
enum SomeEnumeration {
    // enumeration definition goes here
}
  • 例子:
    写法一:一个一个写枚举的成员
enum name {
    case OC
    case Swift
    case Python
    case Java
}

写法二:多个成员值在同一行中声明

enum name2 {
    case OC, Swift, Python, Java
}

在枚举中定义的值就是枚举的成员值(或者成员) case 则明确了要定义的成员值

  1. 获取枚举的成员值
    通过点语法实现
var ProLanguage = name.OC
// 更改值
ProLanguage = name.Swift
ProLanguage = .Java
  1. 使用 Switch 语句来匹配枚举值
switch ProLanguage {
case .OC:
    print("Obj-c")
case .Swift:
    print("Swift")
case .Python:
    print("Python")
case .Java:
    print("Java")
}

当你无法匹配所有的枚举值的时候,可以使用关键字default

switch ProLanguage {
case .OC:
    print("Obj-c")
case .Swift:
    print("Swift")
case .Python:
    print("Python")
default:
    print("Ohter proLanguage")
}
  1. 遍历枚举情况(case)
    通过在枚举名字后面写 : CaseIterable 来允许枚举被遍历。
    通过关键字 allCases 来获取对应枚举类型所有情况的集合。
enum name3 : CaseIterable {
    case OC, Swift, Python, Java
}

let ProLanguageCount = name3.allCases.count
print(ProLanguageCount)

for itemLanguage in name3.allCases {
    print(itemLanguage)
}
  1. 初始值
    用来存储相同的值, 这也是枚举的另外一种定义方法
enum name4 : String {
    case OC = "OCString"
    case Swift = "SwiftString"
    case Java = "JavaString"
    case Python = "pythonString"
}
  • 隐式初始值
    当你在操作存储整数或字符串原始值枚举的时候,你不必显式地给每一个成员都分配一个原始值。当你没有分配时,Swift 将会自动为你分配值。
enum name5 : String {
    case OC = "OCString"
    case Swift // 隐式初始值为Swift
    case Java
    case Python
}
  • 访问初始值
    通过rawValue属性来访问
let ProLanguage1 = name4.Python.rawValue
  • 从原始值初始化
    通过初始值来访问枚举成员值。
    因为可能会存在为空的情况,所以返回的是可选类型
let possibleLanguage = name4(rawValue: "OCString")
print(possibleLanguage!)

枚举的介绍就到这里了。有什么不足的地方欢迎补充。文章大多数内容来自:

Swift中文
YungFan老师
再次感谢!

求职广告:本人实习生,现在急需一份工作,杭州南京合肥的都可以。对我感兴趣的可以私聊我 0.0。谢谢~~~

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容