窥探Swift之别样的枚举类型

想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了。Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性。在Swift语言中的枚举可谓是让人眼前一亮。在Swift中的枚举不仅保留了大部分编程语言中枚举的特性,同时还添加了一些好用而且实用的新特性,在本篇博客中将领略一些Swift中枚举类型的魅力。


有小伙伴会问,不就是枚举么,有什么好说的。在Swift中的枚举怎不然,Swift中的枚举的功能要强大的多,不仅可以给枚举元素绑定值,而且可以给枚举元素关联多个值,同时还可以通过元素的值给一个枚举变量赋一个枚举值,并且枚举中可以定义枚举函数。下面将要开始窥探一下Swift中的枚举。


一、定义枚举


Swift中枚举的定义与其他编程语言中定义枚举不同,在每个枚举元素前面多了一个关键字casecase后紧跟的是枚举元素,下面是定义枚举类型的两种方式。


1. 多个case,每个枚举元素前都有个case



//枚举的定义


enum

KindOfAnimal

{

case Cat

case Dog

case Cow

case Duck

case Sheep

}


2.一个case搞定所有元素,枚举元素之间使用逗号隔开


//你也可以这样定义枚举类型


enum KindOfAnimalTwo{

    

    caseCat,Dog,Cow,Duck,Sheep

    

}

二、枚举类型的使用


定义完枚举类型就是为了使用的对吧,直接使用枚举类型声明变量即可,Swift中是不需要typedef来定义枚举类型的,我们可以直接使用枚举类型。



//定义枚举变量并赋值


var animal1:KindOfAnimal = KindOfAnimal.Cat


给枚举变量赋值时也可以把枚举类型名省略掉,因为在声明枚举变量时就已经指定了枚举变量的类型。

var animal2:KindOfAnimal = .Dog




Switch中使用我们的枚举变量



//Switch…Case中使用枚举


switch animal1  {

    

    case KindOfAnimal.Cat:

        

        println("Cat")

        

    case KindOfAnimal.Dog:

        

        println("Dog")

        

    case KindOfAnimal.Cow:

        

        println("Cow")

        

    case KindOfAnimal.Duck:

        

        println("Duck")

        

    case KindOfAnimal.Sheep:

        

        println("Sheep")

        

    default:

        

        println("error

                = 呵呵")

            

}

三、给枚举成员赋值


Swift中声明枚举时,是可以给每个枚举成员赋一个值的,下面的City枚举的成员就被指定了一个值,如下所示:



//给枚举赋值


enum City:String{

    

    case Beijing="北京"

    

    case ShangHai="上海"

    

    case GuangZhou="广州"

    

    case ShengZhen="深圳"

}


使用枚举变量的rawValue可以获取给每个枚举成员赋的值,代码如下:



//定义枚举变量并赋值


var myInCity:City = City.Beijing




//获取枚举变量的值


var myInCityString:String = myInCity.rawValue;


println(myInCityString)    //输出:北京

四、通过枚举成员的值给枚举变量赋值


什么是通过枚举成员的值给枚举变量赋值呢?举个例子,以上面的枚举类型City为例,假如我们只知道一个枚举成员的值是北京,而不知道北京这个值对应的枚举成员是”Beijing”,Swift中是可以通过北京这个值给枚举变量赋一个枚举成员“Beijing”的。


是不是有点绕啊,来点实例吧,下面就是通过枚举成员的原始值给枚举变量赋值的代码



//通过枚举成员的值,来给枚举成员赋值


var youInCity:City?=City(rawValue:"北京");

为啥我们的youInCity是可选值类型的呢?原因很简单,我们不确定枚举City中的成员的值是否含有北京,枚举变量youInCity的值是不确定的,所以喽是可选类型的,下面我们就取出youInCity的值,首先判断youInCity是否为City.Beijing,如果是,说明赋值成功就输出值。

            

            

            //取出youInCity中的值

            

if youInCity == City.Beijing

{

    var cityName:NSString = youInCity!.rawValue

        

    println(cityName)

        //输出:北京

}

找一个枚举成员的值中不包含的字符串用来给枚举变量赋值,观察一下结果,下面的testCity的值打印出来为nil,因为枚举中没有一个成员的值为



//传入一个枚举中没有的值


var testCity:City?=City(rawValue:"");




// testCitynil


println(testCity)

五、枚举值自增


好东西还是要保留的,在Swift中的枚举值如果是整数的话,第一个赋值后,后边的会自增的。关于枚举值自增就不多说了,直接看实例吧。



//枚举值自增


enum Hour:Int{

    

case One = 1

    

case Two

    

case Three

    

case Four

    

case Five

    

case Six

    

case Seven

    

case Eight

    

}


var hourTest: Int = Hour.Eight.rawValue


println(hourTest)      //hourTest =8


六、枚举关联值

什么是枚举的关联值呢?从字面意思上看是给枚举成员关联一个值,没错,就是在给枚举变量赋值时,给枚举变量关联一个值。在Swift中如何做的呢?就是在声明枚举类型中的元素时使用小括号来制定关联值的类型,然后在给枚举变量赋值的时候关联一个或者多个值即可,直接看实例。




下面的代码是给iOS指定了两个String类型的关联值,在给枚举变量赋值的时候关联两个值。关联这两个值可以在Switch语句中进行使用。

            

            

            

//枚举的关联值



enum mobileLanguage{

    

    case IOS(String,String)

    case Android(String)

}


var iPhone:mobileLanguage = mobileLanguage.IOS("Objective-C","Swift")



switch iPhone{

    

    

    case mobileLanguage.IOS(letlanguage1,letlanguage2):

        

        

        println("language1= (language1), language2 = (language2)")

                

    case mobileLanguage.Android(lettemp):

                

                

        println(temp);

                

                

    default:

                

        println("NO")

            

}


//输出结果:language1 = Objective-C,language2 = Swift


七、枚举函数


Swift中的枚举是可以添加函数的,有没有眼前一亮呢。下面的代码段是在上面的关联值代码的基础上添加了一个描述函数,返回的就是当前枚举变量的枚举信息,如下代码段所示:



//枚举函数


enum mobileLanguageFun{

    

case IOS(String,String)

    

case Android(String)

    

    //定义枚举函数

    

var description:String{

        

    switchself

        {

            

        case  mobileLanguageFun.IOS(let language1,let language2):

            

            return"language1 =\(language1),language2 =\(language2)"

            

        case

            mobileLanguageFun.Android(let temp):

            

            return temp

            

        default:

            

            return ("NO")

            

        }

    }

    

}


var myMobile: mobileLanguageFun = mobileLanguageFun.IOS("objc","swift")


println(myMobile.description)

//language1 = objc, language2 = swift


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值