美文网首页
《Swift学习笔记》11 - 枚举的简单介绍

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

作者: ShIwEn9 | 来源:发表于2019-08-12 15:29 被阅读0次

    介绍: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。谢谢~~~

    相关文章

      网友评论

          本文标题:《Swift学习笔记》11 - 枚举的简单介绍

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