服务器之家:专注于服务器技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - Swift - Swift编程之枚举类型详解

Swift编程之枚举类型详解

2020-12-24 15:41青玉伏案 Swift

这篇文章主要介绍了Swift编程之枚举类型,讲解了枚举语法、匹配枚举值与switch语句、关联值、原始值等内容,Swift中枚举类型是最重要的类型,感兴趣的小伙伴们可以参考一下

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

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

一、定义枚举

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

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

?
1
2
3
4
5
6
7
8
//枚举的定义
enum KindOfAnimal {
 case Cat
 case Dog
 case Cow
 case Duck
 case Sheep
}

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

?
1
2
3
4
//你也可以这样定义枚举类型
enum KindOfAnimalTwo {
 case Cat, Dog, Cow, Duck, Sheep
 }

二、枚举类型的使用

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

?
1
2
//定义枚举变量并赋值
var animal1: KindOfAnimal = KindOfAnimal.Cat

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

?
1
var animal2: KindOfAnimal = .Dog

在Switch中使用我们的枚举变量

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//在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枚举的成员就被指定了一个值,如下所示:

?
1
2
3
4
5
6
7
//给枚举赋值
enum City: String{
 case Beijing = "北京"
 case ShangHai = "上海"
 case GuangZhou = "广州"
 case ShengZhen = "深圳"
}

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

?
1
2
3
4
5
6
//定义枚举变量并赋值
var myInCity: City = City.Beijing
 
//获取枚举变量的值
var myInCityString: String = myInCity.rawValue;
println(myInCityString) //输出:北京

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

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

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

?
1
2
//通过枚举成员的值,来给枚举成员赋值
var youInCity: City? = City(rawValue: "北京");

 

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

?
1
2
3
4
5
//取出youInCity中的值
if youInCity == City.Beijing {
 var cityName: NSString = youInCity!.rawValue
 println(cityName) //输出:北京
}

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

?
1
2
3
4
5
//传入一个枚举中没有的值
var testCity: City? = City(rawValue: "京");
 
// testCity为nil
println(testCity)

五、枚举值自增

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//枚举值自增
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语句中进行使用。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//枚举的关联值
enum mobileLanguage{
 case IOS (String, String)
 case Android (String)
}
 
var iPhone: mobileLanguage = mobileLanguage.IOS("Objective-C", "Swift")
 
switch iPhone {
 case mobileLanguage.IOS(let language1, let language2):
 println("language1 = \(language1), language2 = \(language2)")
 
 case mobileLanguage.Android(let temp):
 println(temp);
 default:
 println("NO")
}
 
//输出结果:language1 = Objective-C, language2 = Swift

七、枚举函数

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
//枚举函数
enum mobileLanguageFun{
 case IOS (String, String)
 case Android (String)
 //定义枚举函数
 var description: String{
 switch self {
 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

以上就是本文的全部内容,希望对大家学习swift软件编程有所帮助。

延伸 · 阅读

精彩推荐
  • SwiftSwift使用CollectionView实现广告栏滑动效果

    Swift使用CollectionView实现广告栏滑动效果

    这篇文章主要为大家详细介绍了Swift使用CollectionView实现广告栏滑动效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    Stevin的技术博客12372021-01-13
  • SwiftSwift能代替Objective-C吗?

    Swift能代替Objective-C吗?

    这是我在网上上看到的答案,复制粘贴过来和大家分享一下,因为我和很多人一样很关心Swift的出现对Mac开发的影响和对Objective-C的影响。...

    Swift教程网4412020-12-16
  • Swiftswift where与匹配模式的实例详解

    swift where与匹配模式的实例详解

    这篇文章主要介绍了swift where与匹配模式的实例详解的相关资料,这里附有简单的示例代码,讲的比较清楚,需要的朋友可以参考下...

    追到梦的魔术师14382021-01-06
  • Swiftmac git xcrun error active developer path 错误

    mac git xcrun error active developer path 错误

    本文主要是讲诉了如何解决在mac下使用git;xcode4.6的环境时,出现了错误(mac git xcrun error active developer path)的解决办法,希望对大家有所帮助...

    Swift教程网2232020-12-16
  • SwiftSwift中转义闭包示例详解

    Swift中转义闭包示例详解

    在Swift 中的闭包类似于结构块,并可以在任何地方调用,下面这篇文章主要给大家介绍了关于Swift中转义闭包的相关资料,需要的朋友可以参考下...

    小小小_小朋友11412021-12-26
  • SwiftSwift的74个常用内置函数介绍

    Swift的74个常用内置函数介绍

    这篇文章主要介绍了Swift的74个常用内置函数介绍,这篇文章列举出了所有的Swift库函数,内置函数是指无需引入任何模块即可以直接使用的函数,需要的朋友可...

    Swift教程网5802020-12-19
  • SwiftSwift实现多个TableView侧滑与切换效果

    Swift实现多个TableView侧滑与切换效果

    这篇文章主要为大家详细介绍了Swift实现多个TableView侧滑与切换效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下...

    乞力马扎罗的雪雪5822021-01-08
  • SwiftSwift教程之基础数据类型详解

    Swift教程之基础数据类型详解

    这篇文章主要介绍了Swift教程之基础数据类型详解,本文详细讲解了Swift中的基本数据类型和基本语法,例如常量和变量、注释、分号、整数、数值类型转换等...

    Swift教程网5162020-12-18