Swift学习笔记——枚举

swift 中普通的枚举形式

// 枚举形式,case关键词表明新的一行成员值将被定义
enum Direction {
    case north
    case South
    case East
    case Weast
}
// 注意:在 swift 中,枚举的成员变量有着不同的值,他们不再是0,1,2,3 了


// 多个成员值也可以出现在同一行上,但是要用逗号隔开
enum Direction { case north,South,East,Weast };


// 这一句过后,unKNowDirection 就会被推断是 Direction 的一个可能值
var unKNowDirection = Direction.Weast

// 一旦 unKNowDirection 被声明成一个 Direction,就可以使用(.)语法将其设置成另一个 Direction 的值
unKNowDirection = .East

switch unKNowDirection{
case .north:
    println("is north")
case .south:
    println("is South")
case .East:
    println("is East")
case .Weast:
    println("is Weast")
}
// "is East"

相关值

enum ShopCode{
    case UPCA(Int,Int,Int)
    case QRCode(String)
}

// let productCode = ShopCode.UPCA(8,568_4556,3)
let productCode = ShopCode.QRCode("ABCDEFG")

// 你可以在 switchcase 分支代码提取每个相关值作为一个常量(用let前序)或作为一个变量(用 var 前序)来使用
switch productCode{
case let .UPCA( numberSystem,identifier,check ):
    println("UPCA is \(numberSystem) and \(identifier) and \(check)" )
case let .QRCode(productCode):
    println("i am so sorry is \(productCode)")
}

// "i am so sorry is ABCDEFG"

原始值

// 原始值可以是字符串,字符,或者任何整型值或浮点型值
enum ShopType:Int{
    case income = 1
    case pay
    case free
}

// 使用枚举成员的 rawValue 属性可以访问该枚举成员的原始值,只有具有原始值的枚举成员才有 rawValue 属性
let type = ShopType.income.rawValue

// 也可以通过参数 rawValue 来创建定原始值的枚举
let type2 = ShopType(rawValue: 3)
type2?.rawValue // 3
// 然而,并非所有可能的Int值都可以找到一个匹配的成员。正因为如此,构造函数可以返回一个可选的枚举成员。在上面的例子中,type2是ShopType?类型,或“可选的ShopType”。

// 如果通过构造函数 rawValue 来创建原始值枚举并作为条件需找,那么可选值 type3 为 .free,不再是 nil
let typetoFind = 3
if let type3 = ShopType(rawValue: typetoFind){ // ?为可选值
    switch type3{
    case .income:
        println("income")
    case .free:
        println("free")
    default :
        println("nothing")
    }
}else{
    println("there is no find anything with \(typetoFind)")
}

// "free"
// 注意:相关值与原始值不同点是:
//相关值是当你在创建一个基于枚举成员的新常量或变量时才会被设置,并且每次当你这么做得时候,它的值可以是不同的
//原始值是当你开始在你的代码中定义枚举的时候原始值是被预先填充的值

相关文章

软件简介:蓝湖辅助工具,减少移动端开发中控件属性的复制和粘...
现实生活中,我们听到的声音都是时间连续的,我们称为这种信...
前言最近在B站上看到一个漂亮的仙女姐姐跳舞视频,循环看了亿...
【Android App】实战项目之仿抖音的短视频分享App(附源码和...
前言这一篇博客应该是我花时间最多的一次了,从2022年1月底至...
因为我既对接过session、cookie,也对接过JWT,今年因为工作...