专注iOS开发(OC/Swift)

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

2016-07-18  本文已影响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开发信息 请以关注洲洲哥 的微信公众号,不定期有干货推送:

这里写图片描述
上一篇下一篇

猜你喜欢

热点阅读