关闭

Swift中的枚举enum 与C中的枚举

标签: swiftenum枚举语言c语言
169人阅读 评论(0) 收藏 举报
分类:


C中的枚举


在C语言中,甚至OC等其他高级语言中,都是把enum枚举的值当作是一个int整数来替代

具体可看我的这篇文章:C语言的枚举与宏定义



Swift中的枚举enum


注:本篇文章学习自泊学(boxueio.com)

(PS:Swift更新得真是非常快啊,4个月不到前写的代码,今天打开就提醒有语法要修正…)

1. what:

在Swift中,enum看起来是这样的:

enum Week{
    case MON
    case TUES
    case WED
    case THUR
    case FRI
    case SAT
    case SUN
}

let week1 = Week.MON

或:

enum Subject{
    case Chinese,English,Chemistry,History
}
let mySubject = Subject.Chinese

无论哪种方式,可以在playground看到,当在使用Week.MON时,就已经在访问一个enum的值了,它的case就是它的值本身,无需刻意地定义一个值来代表它。


2. why:

使用enum比使用字符串或数字有很多好处:

1 避免输入错误

2 使用enum类型是安全的,如当使用Week或Subject时,不会发生类型正确,值却没有意义的情况

3. how:

1)enum与switch

如果enum的类型可被推导出,则可在读取值的时候,省掉它类型的名字:

func week(today: Week)
{
    switch today{
    // 因为today可以通过类型推导推出它的类型是Week,所以不用today.MON,而是直接写.MON
    case .MON, .TUES, .WED:
        return
    case .THUR, .FRI, .SAT, .SUN:
        return
    }
}

对于一个enum的switch来说,它的所有的case就是它全部的情况,所以最后不用再写default


2)enum值的表达方式1:raw value原始数值

1. 手动为enum指定值

enum Week:Int{
    case MON   = 2
    case TUES  = 4
    case WED   = 7
    case THUR
    case FRIFRI
    case SAT
    case SUN
}

2. 自动:

如上段代码,当没有手动为后面的THUR、FRI等赋值时,它们将被自动赋值,从上一个值开始递增

3. 访问enum的rawValue:

let week1 = Week.FRI.rawValue
此时为9

4. 用rawValue来访问一个enum的值

let week2 = Week(rawValue: 7)
此时enum值为WED


3)enum值的表达方式2: associated value结合值

1.  给每一个case绑定不同类型的值

enum HTTPAction{
    case GET  // 不关联任何值
    case POST(String)// 关联一个字符串
    case PUT(Int, String)// 关联一个tuple
}

let get = HTTPAction.GET
let post = HTTPAction.POST("hello")
let put = HTTPAction.PUT(1, "world")


2.  通过switch访问enum的结合值associated value

func actionDesc(action: HTTPAction)
{
    switch action
    {
    case .GET:
        print("get")
    case let .POST(msg):// let msg = action
        print("post: \(msg)")
    case .PUT(let num, let name):
        print("put: \(num): \(name)")
    }
}

actionDesc(action: get)
actionDesc(action: post)
actionDesc(action: put)







0
0
查看评论

Swift学习之十六:枚举(Enumeration)

Swift中的枚举与C、OC中的枚举有很大的区别,增加了原来类中ft
  • woaifen3344
  • woaifen3344
  • 2014-06-09 20:20
  • 4037

swift 枚举详解

参考博客:http://c.biancheng.net/cpp/html/2426.html 参考官方文档:https://developer.apple.com/library/ios/documentation/Swift/Conceptual/Swift_Programming_Langua...
  • HHL110120
  • HHL110120
  • 2016-04-14 17:32
  • 701

Swift 中枚举高级用法及实践

title: "Swift 中枚举高级用法及实践" date: 2015-11-20 tags: [APPVENTURE] categories: [Swift 进阶] permalink: advanced-practical-enum-examples 原文链接...
  • imxiangzi
  • imxiangzi
  • 2016-05-04 17:07
  • 11407

Swift 枚举(七)

枚举 1.枚举语法 用enum并把定义放在大括号内,枚举中被定义的值是枚举的成员,case关键字表示新定义的一个成员 enum SomeEnumeration {     // enumeration definition goes here } enum C...
  • huangchentao
  • huangchentao
  • 2014-06-20 16:09
  • 3907

Swift3.0中文教程: 8.枚举

枚举(Enumerations) 1.0 翻译:yankuangshi 校对:shinyzhu 2.0 翻译+校对:futantan 2.1 翻译:Channe 校对:shanks, 2.2 翻译+校对:SketchK 2016-05-13 本页内容包含: 枚举...
  • u012907783
  • u012907783
  • 2016-11-29 15:40
  • 2248

swift enum 和OC兼容

虽然说swift是基于OC的,但是swift和OC还是有很多去别的,今天我们来说一下枚举变量 下面是某个免费短信验证码的验证方法的返回状态 enum SMS_ResponseState { SMS_ResponseStateFail = 0, SMS_ResponseStat...
  • z7222946
  • z7222946
  • 2015-07-09 16:02
  • 1074

【Swift学习笔记00】——enumeration枚举类型遵循协议protocol

Apple官方文档:https://developer.apple.com/library/prerelease/ios/documentation/Swift/Conceptual/Swift_Programming_Language/GuidedTour.html#//apple_ref/doc...
  • duanyipeng
  • duanyipeng
  • 2014-06-19 19:54
  • 4639

二十二 Swift3.0之 枚举

/* Swift枚举: Swift中的枚举比OC中的枚举强大, 因为Swift中的枚举是一等类型, 它可以像类和结构体一样增加属性和方法 格式: enum Method{ case 枚举值 } */enum Method{ // case Add // case Sub // ...
  • gezi0630
  • gezi0630
  • 2017-04-08 17:01
  • 2714

Objective C转Swift注意事项(一)合理使用结构体,枚举,extensions

前言14年Swift刚出的时候开始学习的Swift,后来由于项目需要,一直写App还是用的OC。最近打算把Swift重新捡起来,这个Objective C转Swfit系列就当成是我的复习笔记,顺便写成博客记录下来吧。这个系列不是讲解Swift基础,主要是讲解OC(以下OC均指的是Objective ...
  • Hello_Hwc
  • Hello_Hwc
  • 2016-07-10 11:21
  • 2573

Swift的enum枚举类型介绍

声明枚举类型的几种方法和使用: 一:enum Direction{ case North case South case East case West }; //简写如下 enum Direction2{ case North,South,West,East ...
  • yangbo_hbzjk
  • yangbo_hbzjk
  • 2015-06-08 15:21
  • 5668
    个人资料
    • 访问:10841次
    • 积分:576
    • 等级:
    • 排名:千里之外
    • 原创:45篇
    • 转载:5篇
    • 译文:0篇
    • 评论:6条
    文章分类
    最新评论