Swift-细说枚举(Enum)

Swift-细说枚举(Enum),第1张

声明一个方向的枚举,包含四个枚举值: 东/西/南/北

Swift 的枚举成员在被创建时本身就是完备的值,这些值的类型是已经明确定义好的 Direction 类型 不会像 Objective-C 一样被赋予一个默认的整型值。在上面的 Direction 例子中,east、west 、north、south不会被隐式地赋值为 0,1,2 和 3。

Swift 中的枚举更加灵活,不必给每一个枚举成员提供一个值。如果给枚举成员提供一个值(称为原始值),则该值的类型可以是:字符串、字符、任意的整数值或浮点类型。

Swift的枚举类型提供了一个叫原始值(RawValues)的实现,它为枚举项提供了一个默认值,这个默认值在编译期间就是确定的。

通过原值值获取的枚举项是可选类型的,所以需要用if let 做一下判断。

未指定枚举值类型

隐式原始值

隐式原始值下枚举项使用系统的分配值:

显式原始值

隐式 + 显式原始值

这里使用了属性观察者,Swift里面的枚举更像一个对象,因此可以很方便的使用属性观察者对枚举值进行监听。

在 Swift 中,还可以定义这样的枚举类型,它的每一个枚举项都有一个附加信息,来扩充这个枚举项的信息表示,这又叫做关联值。

一定要学会使用关联值,这一点很重要。具体的使用后面的第九节会细说

通常情况下枚举是很容易进行相等判断的。一旦为枚举增加了关联值,Swift就没法正确的比较了,需要自己对该枚举实现 == 运算符。

借助 Comparable 协议,来实现枚举的比较。

遵守 CaseIterable 协议的swift枚举是可以遍历的,通过allCases获取所有的枚举成员

app里面的接口地址,如果都放一起,命名或者寻找都不方便,可以用枚举的嵌套来设计。可以分散在多个文件中,方便维护和管理。

用枚举来管理系统里面的常量是一个不错的选择。

枚举中不能使用存储属性,但是可以使用计算属性,计算属性的内容是在枚举值或者枚举关联值中得到的。

在这里,可以认为枚举是一个类,introduced是一个成员方法,AppleDeivceiPhone 就是一个AppleDeivce的实例,case们是它的属性。introduced里面的switch self,其实就是遍历这个匿名属性的所有场景,如iPad,iPhone等,然后根据不同的场景返回不同的值。

可以做枚举的自定义构造方法。

系统的打印协议

让枚举遵守这个协议

枚举可以进行扩展。可以将枚举中的case与method/protocol分隔开,阅读者可以快速消化枚举的内容。

设计一个网络类下的错误信息的处理功能。

在项目中经常使用 UserDefaults 来存储一下简单的用户信息。但是对 Key 的维护不会很方便。而且会想不起来。用枚举+结构体就能很好的解决这个问题。

这么设计APP的存储模块,是不是更有层级感,更加方便使用呢?

递归枚举是拥有另一个枚举作为枚举成员关联值的枚举。当编译器 *** 作递归枚举时必须插入间接寻址层。可以在声明枚举成员之前使用 indirect关键字来明确它是递归的。 也可以声明在整个枚举前,让所有的枚举成员都是递归的。

package comschoolstereotype; 

  活动枚举类型 

  @author QiXuanChen 

 /

public enum EventStatus { 

  / 

    未发布。 

   / 

  DRAFT("DRAFT", "未发布"), 

  / 

    已发布。 

   /

  PUBLISHED("PUBLISHED", "已发布"); 

  / 

    活动状态的值。 

   /

  private String value; 

  / 

    活动状态的中文描述。 

   /

  private String text; 

  / 

    @param status 活动状态的值 

    @param desc 活动状态的中文描述 

   /

  private EventStatus(String status, String desc) { 

    value = status; 

    text = desc; 

  } 

  / 

    @return 当前枚举对象的值。 

   /

  public String getValue() { 

    return value; 

  } 

  / 

    @return 当前状态的中文描述。 

   /

  public String getText() { 

    return text; 

  } 

  / 

    根据活动状态的值获取枚举对象。 

    

    @param status 活动状态的值 

    @return 枚举对象 

   /

  public static EventStatus getInstance(String status) { 

    EventStatus[] allStatus = EventStatusvalues(); 

    for (EventStatus ws : allStatus) { 

      if (wsgetValue()equalsIgnoreCase(status)) { 

        return ws; 

      } 

    } 

    throw new IllegalArgumentException("status值非法,没有符合课程状态的枚举对象"); 

  } 

}

枚举常量是枚举类型中的值,是一种用户定义的类型,只有用户在程序中定义它后才能被使用。用户通常利用枚举类型定义程序中需要使用的一组相关的符号常量。枚举类型的定义格式为: enum <枚举类型名> {<枚举表>}; (1) enum color{red, yellow, blue}; (2) enum day{Sun, Mon, Tues, Wed, Thur, Fri, Sat}; 第一条语句定义了一个枚举类型color,用来表示颜色,它包含三个枚举值red,yellow和blue,分别代表红色、**和兰色。 第二条语句定义了一个枚举类型day,用来表示日期,它包含7个枚举值,分别表示星期日、星期一至星期六。 一种枚举类型被定义后,可以象整型等预定义类型一样使用在允许出现数据类型的任何地方。如可以利用它定义变量。 (1) enum color c1, c2,c3; (2) enum day today, workday; (3) c1=red; (4) workday=Wed; 第一条语句开始的保留字enum和类型标识符colou表示上述定义的枚举类型color,其中enum可以省略不写,后面的三个标识符c1,c2和c3表示该类型的三个变量,每一个变量用来表示该枚举表中列出的任一个值。 第二条语句开始的两个成分(成分之间的空格除外)表示上述定义的枚举类型day,同样enum可以省略不写,后面的两个标识符today和workday表示

以上就是关于Swift-细说枚举(Enum)全部的内容,包括:Swift-细说枚举(Enum)、用java写一个枚举类程序、枚举类型enum用法 怎么去取所有等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9633705.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存