美文网首页专注iOS开发(OC/Swift)
跟着洲洲哥一块学习Swift-枚举

跟着洲洲哥一块学习Swift-枚举

作者: 洲洲哥 | 来源:发表于2016-07-18 16:42 被阅读25次

本文首发地址

Swift-枚举

枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这些值。

OC的枚举写法

typedef enum  {
    checkNetWorkStateUnknown = 0,   // 没有网络
    checkNetWorkStateReachable ,     // 没有网络
    checkNetWorkStateViaWWAN ,       // 手机自带网络
    checkNetWorkStateWiFi,                    // WIFI状态
} NetWorkState;
 */
enum CompassPoint { 
    case North 
    case South 
    case East 
    case West 
} 
//Swift用Case来确认情况区分
还可以这样
enum Planet {
    case Mercury,Venus,Earth
}
//调用(直接用点语法)
var directHead = CompassPoint.West


/*directionToHead的类型被推断当它被CompassPoint的一个可能值初始化。一旦directionToHead被声明为一个CompassPoint,你可以使用更短的点(.)语法将其设置为另一个CompassPoint的值:
 */
directHead = .East

* 匹配枚举值和Switch语句

let direcrt = Planet.Mercury

switch direcrt {
case .Mercury:
    print("----north")
case .Venus:
    print("----West")
default:
    print("------Defsult")
}

关联值(Associated Values)

你可以定义 Swift 的枚举存储任何类型的关联值,如果需要的话,每个成员的数据类型可以是各不相同的。枚举的这种特性跟其他语言中的可辨识联合(discriminated unions),标签联合(tagged unions),或者变体(variants)相似。

enum Barcode {
    case UPDA(Int,Int,Int)
    case QRCode(String)
}
// 调用
var productBarcode = Barcode.UPDA(12, 12, 34)
productBarcode = .QRCode("1345678820")
//判断productBarcode是属于哪一个情况
switch productBarcode {
case .UPDA(let numberSystem,let identifier,let check):
    print("UPC-A with value of \(numberSystem), \(identifier), \(check).")
case .QRCode(let produceCode):
    print("-----\(produceCode)")

}

/*
 如果一个枚举成员的所有关联值被提取为常量,或者它们全部被提取为变量,为了简洁,你可以只放置一个var或者let标注在成员名称前:
 */
switch productBarcode {
case  let .UPDA( numberSystem, identifier, check):
    print("UPC-A with value of \(numberSystem), \(identifier), \(check).")
case let  .QRCode( produceCode):
    print("-----\(produceCode)")
}

原始值(Raw Values)

在关联值小节的条形码例子中演示了一个枚举的成员如何声明它们存储不同类型的关联值。作为关联值的替代,枚举成员可以被默认值(称为原始值)预先填充,其中这些原始值具有相同的类型。

enum NetState: Int {
    case WIFI = 0, fffffff, GPRS
}
// //使用枚举成员的rawValue方法可以访问该枚举成员的原始值:
NetState.WIFI.rawValue //0
NetState.fffffff.rawValue// 1
NetState.GPRS.rawValue // 2

//使用枚举的init(rawValue: index)方法来试图找到具有特定原始值的枚举成员。

NetState.init(rawValue: 2)?.rawValue
NOTICE:获取枚举数据,有可能超出数据范围,取不出任何数据。所以是可选性用 “?”

如有问题可添加我的QQ:1290925041
还可添加QQ群:234812704(洲洲哥学院)
欢迎各位一块学习,提高逼格!
也可以添加洲洲哥的微信公众号

更多消息

更多信iOS开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:

这里写图片描述

相关文章

  • 跟着洲洲哥一块学习Swift-枚举

    本文首发地址 Swift-枚举 枚举定义了一个通用类型的一组相关的值,使你可以在你的代码中以一个安全的方式来使用这...

  • 跟着洲洲哥一块学习Swift-函数

    本文首发地址 Swift-函数 当你定义一个函数时,你可以选择性地定义一个或多个名称,类型值作为函数的输入(称为形...

  • 跟着洲洲哥一块学习Swift-数组

    本文首发地址 数组 Swift语言里的数组和字典中存储的数据值类型必须明确。 这意味着我们不能把不正确的数据类型插...

  • 跟着洲洲哥一块学习Swift-属性

    本文首发地址 Swift-属性 首先结构体和枚举都是值类型,类是引用类型。 把结构体赋值给一个变量 * 把结构体...

  • 跟着洲洲哥一块学习Swift-控制流

    本文首发地址 今天给大家介绍控制流,也就是控制语句了。比如if,for,switch,do...while... ...

  • 跟着洲洲哥一块学习Swift- 基本类型

    本文首发地址 洲洲哥教你学Swift(一) @(洲洲哥整理发表)[iOS|Swift|洲洲哥] 认识Swift今天...

  • iOS-圆角和边框共存

    圆角和边框共存 如有问题可添加QQ群:234812704 欢迎各位一块学习,提高逼格! 也可以添加洲洲哥的微信公众...

  • 洲洲哥学院开课了-IMP

    来了,来了,来了,看春天的脚步近了。而我就要直播了。 洲洲哥学院带你飞。 本周洲洲哥为各位带来一个底层[ IMP ...

  • 《玄门散识》仙迹卷☯道教中的十洲

    道教中的十洲是指祖洲、瀛洲、玄洲、炎洲、长洲、元洲、流洲、生洲、凤麟洲、聚窟洲十洲。 祖洲在东海中,方圆七百里,离...

  • 道教知识三则

    谓十洲三岛? 十洲为:瀛洲、玄洲、长洲、流洲、元洲、生洲、祖洲、炎洲、凤麟洲、聚窟洲。 三岛为:昆仑、方丈、蓬莱。...

网友评论

    本文标题: 跟着洲洲哥一块学习Swift-枚举

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