加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Swift学习笔记——枚举

发布时间:2020-12-14 01:53:14 所属栏目:百科 来源:网络整理
导读:swift 中普通的枚举形式 // 枚举形式,case关键词表明新的一行成员值将被定义 enum Direction { case North case South case East case Weast} // 注意:在 swift 中,枚举的成员变量有着不同的值,他们不再是0,1,2,3 了 // 多个成员值也可以出现在同一行

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读