美文网首页
《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