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

swift 枚举

发布时间:2020-12-14 02:36:38 所属栏目:百科 来源:网络整理
导读:枚举允许用户定义一组相关联的值,然后以一个安全的方式来使用它。 定义枚举 先来定义一个简单的枚举Direction enum Direction{ case Left case Right case Top case Bottom} 每个值都定义在一个case后面。也可以使用一个case来定义一组值,像这样 enum Dire

枚举允许用户定义一组相关联的值,然后以一个安全的方式来使用它。

定义枚举

先来定义一个简单的枚举Direction

enum Direction{
    case Left
    case Right
    case Top
    case Bottom
}

每个值都定义在一个case后面。也可以使用一个case来定义一组值,像这样

enum Direction{
    case Left,Right,Top,Bottom
}

当然,也可以这样

enum Direction{
    case Left,Right
    case Top
    case Bottom
}

以上代码都定义了一个相同的Direction枚举,包含四个值。

遍历枚举

通常情况下我们使用switch来遍历枚举

//先声明一个枚举变量
var myDirection = Direction.Right
switch myDirection{

case Direction.Left :
    print("myDirection is left")

case .Right :
    print("myDirection is right")

default:
    print("myDirection is others")
}

需要注意的是,在swift中,switch代码段中,每一个case的后面不需要加break,当匹配到任何一个case语句后,就执行对应的代码,然后直接跳出switch代码段。

已知类型可省略类型名

当一个枚举变量的类型已知时,我们使用枚举成员时可以省去类型名,如上面的case .Right :,或者,给一个已知类型的枚举变量赋值时,可以这样

myDirection = .Top

尽管这样子写的话,代码更加精简,但是为了使代码保持更高的可读性,还是建议不要省去类型名。

原始值(Raw value)

我们可以为所有枚举成员指定一个某类型的值,例如

enum Direction :Int{
    case Left = 1,Right,Top,Bottom
}

上面的代码为Direction枚举的原始值指定为Int类型,并且给第一个值赋值。当然,我可以分别为每一个成员指定一个原始值。如果我只指定了一个,则同一个case下的值会自动生成。上面的四个成员的值分别为:1,2,3,4
如果我使用多个case,如下:

enum Direction :Int{
    case Left = 1,Right
    case Top = 101,Bottom
}

则四个成员的原始值分别为:1,2,101,102
跟原始值相关的操作还有:获取枚举对象的原始值,以及根据某个原始值来生成枚举对象,看代码

myDirection = Direction.Bottom
//获取枚举对象的原始值
print(myDirection.rawValue)
//根据某个原始值来生成枚举对象
var direction2 = Direction(rawValue: 2)
if let value = direction2 {
    print(value)
}

关联值(Associated value)

关联值的特性让swift的枚举更加强大。swift允许我们给枚举的所有成员指定不同类型的关联值!
假如我们要定义一个枚举Gender,男性需要提供姓名和职业,女性则需要提供姓名和年龄,则我们的枚举可以这样定义

enum Gender{
    case Male(String,String)
    case Female(String,Int)
}

然后声明两个Gender类型的变量,一男一女

var lilei=Gender.Male("lilei","programmer")
var hanmeimei=Gender.Female("hanmeimei",21)

然后我定义一个函数来打印这两个变量的信息

func printGender(genderItem :Gender){
    switch genderItem {
    case .Male(let name,let profession) :
        print("(name) is a (profession)")
    case .Female(let name,let age):
        print("(name) is (age) years old")
    }
}

//调用该函数
printGender(lilei)
printGender(hanmeimei)

上面代码的输出结果为:
lilei is a programmer
hanmeimei is 21 years old

枚举的常用方法已经介绍完了。

(编辑:李大同)

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

    推荐文章
      热点阅读