Swift 枚举

枚举简单的说也是一种数据类型,只不过是这种数据类型只包含自定义的特定数据,它是一组有共同特性的数据的集合。

Swift 的枚举类似于 Objective C 和 C 的结构,枚举的功能为:

它声明在类中,可以通过实例化类来访问它的值。

枚举也可以定义构造函数(initializers)来提供一个初始成员值;可以在原始的实现基础上扩展它们的功能。

可以遵守协议(protocols)来提供标准的功能。

语法

Swift 中使用 enum 关键词来创建枚举并且把它们的整个定义放在一对大括号内:

enum enumname {

// 枚举定义放在这里

}

例如我们定义以下表示星期的枚举:

import Cocoa


// 定义枚举

enum DaysofaWeek {

case Sunday

case Monday

case TUESDAY

case WednESDAY

case THURSDAY

case FRIDAY

case Saturday

}


var weekDay = DaysofaWeek.THURSDAY

weekDay = .THURSDAY

switch weekDay

{

case .Sunday:

print("星期天")

case .Monday:

print("星期一")

case .TUESDAY:

print("星期二")

case .WednESDAY:

print("星期三")

case .THURSDAY:

print("星期四")

case .FRIDAY:

print("星期五")

case .Saturday:

print("星期六")

}

以上程序执行输出结果为:

星期四

枚举中定义的值(如 Sunday,Monday,……和Saturday)是这个枚举的成员值(或成员)。case关键词表示一行新的成员值将被定义。

注意: 和 C 和 Objective-C 不同,Swift 的枚举成员在被创建时不会被赋予一个默认的整型值。在上面的DaysofaWeek例子中,Sunday,Monday,……和Saturday不会隐式地赋值为0,1,……和6。相反,这些枚举成员本身就有完备的值,这些值是已经明确定义好的DaysofaWeek类型。

var weekDay = DaysofaWeek.THURSDAY

weekDay的类型可以在它被DaysofaWeek的一个可能值初始化时推断出来。一旦weekDay被声明为一个DaysofaWeek,你可以使用一个缩写语法(.)将其设置为另一个DaysofaWeek的值:

var weekDay = .THURSDAY

当weekDay的类型已知时,再次为其赋值可以省略枚举名。使用显式类型的枚举值可以让代码具有更好的可读性。

枚举可分为相关值与原始值。

相关值与原始值的区别

相关值 原始值

不同数据类型 相同数据类型

实例: enum {10,0.8,"Hello"} 实例: enum {10,35,50}

值的创建基于常量或变量 预先填充的值

相关值是当你在创建一个基于枚举成员的新常量或变量时才会被设置,并且每次当你这么做得时候,它的值可以是不同的。 原始值始终是相同的

相关值

以下实例中我们定义一个名为 Student 的枚举类型,它可以是 Name 的一个相关值(Int,Int,Int,Int),或者是 Mark 的一个字符串类型(String)相关值。

import Cocoa


enum Student{

case Name(String)

case Mark(Int,Int,Int)

}

var studDetails = Student.Name("Runoob")

var studMarks = Student.Mark(98,97,95)

switch studMarks {

case .Name(let studName):

print("学生的名字是: \(studName)。")

case .Mark(let Mark1,let Mark2,let Mark3):

print("学生的成绩是: \(Mark1),\(Mark2),\(Mark3)。")

}

以上程序执行输出结果为:

学生的成绩是: 98,95。

原始值

原始值可以是字符串,字符,或者任何整型值或浮点型值。每个原始值在它的枚举声明中必须是唯一的。

在原始值为整数的枚举时,不需要显式的为每一个成员赋值,Swift会自动为你赋值。

例如,当使用整数作为原始值时,隐式赋值的值依次递增1。如果第一个值没有被赋初值,将会被自动置为0。

import Cocoa


enum Month: Int {

case January = 1,February,march,April,May,June,July,August,September,October,November,December

}


let yearMonth = Month.May.rawValue

print("数字月份为: \(yearMonth)。")

以上程序执行输出结果为:

数字月份为: 5。

17、swift开发iOS——枚举的更多相关文章

  1. 可以在Mavericks(OS X 10.9)上使用XCode 5为iOS 6开发吗?

    这个问题已经过时了.小牛队发布,一切正常,在iPod4th上使用Xcode5和iOS6.我正在考虑将我的OSX升级到Mavericks,但我仍然想继续开发我的iOS应用程序.我在网上看到Xcode4.6.3与Mavericks不兼容.所以,这会迫使我使用新的Xcode5.然而,Xcode5附带了新的iOS7SDK.问题是我拥有一个与iOS7不兼容的iPod第四代.那么,有人试过这个吗?

  2. iOS >>块>>更改块外部的变量值

    我不是在处理一个Object并改变它,就像我的mString一样.我希望’center’属性的行为类似于myInt,因为它是直接访问的C结构,而不是指向对象的指针.我希望’backgroundColor’的行为类似于我的imstring,因为它是一个指向一个新对象的对象的指针,不是吗?

  3. ios – 从iphone app store过渡到企业开发

    它应该覆盖手机上的相同应用程序,而不是创建第二个应用程序.我联系了Apple支持,他们说:“不,如果你没有指示客户卸载他们的旧应用程序,你将安装2个应用程序”.这是真的?

  4. ios – Marmalade SDK是否与游戏开发更相关或更常用?

    我是移动应用程序开发的新手,并且正在寻找一个适合的平台.我遇到了一个项目,人们希望将交换机和家庭自动化公司的自助广告实施到移动应用程序中.他们最初想要一个iPhone应用程序,但也希望随后在Android和其他平台上部署.一个类似的应用程序是这one.在投入大量时间研究各种SDK和开发人员计划之后,Marmalade通过它的多平台部署功能引起了我的注意.然而,在经历了一些教程之后,我发现these

  5. ios – 尝试在设备上运行我的应用程序时找不到此可执行文件的有效配置文件

    我正在敲打我的头一天超过一天,我几天前将应用程序上传到苹果商店,它被拒绝了.我做了更改,现在想再次在我的手机上测试应用程序,每次我都收到一条奇怪的消息,告诉我没有有效的配置文件.我是iOS的新手.我检查了各种问题,并按照解释设置了所有内容.为什么这个奇怪的错误.点击窗口>组织者我看到我的有效个人资料和我的iPhone带有绿色信号.我想知道问题出在哪里!

  6. iOS7 Safari中的全屏模式

    我正在使用SenchaTouch开发移动网站.在iOS7Safari中,我无法创建顶级地址栏和下面的工具栏消失了.Sencha过去常常处理iOS6,但iOS7最近的一些变化导致了这个问题.http://java.dzone.com/articles/safari-ios-7-and-html5我阅读了上面的链接&对于HTML5游戏而言,这似乎也是一个问题.一些其他应用程序.适用于iOS6的旧win

  7. 泛型 – Xcode构建错误时,我添加枚举到泛型类?

    为什么在将泛型类添加到枚举时会收到错误:错误:但是当我这样做时,我没有收到错误:或这个:解决方法您不能将任何类型嵌套在通用的类型中,反之亦然.换句话说,你不能像类,结构和枚举这样做的事情:和乃至苹果人explained的限制原因:It’sanimplementationlimitation.We’llremovetherestrictiononceourcompilerandruntimearea

  8. 调试 – iOS设备上的remote console.log()

    我正在开发涉及touchEvent的网络应用程序.如果我可以在我的Mac上远程查看控制台,那么调试它会更容易一些.我可以在iOS设备上使我的MobileSafari将控制台日志存储在系统中的某个位置.我已经越狱了我的iPad.谢谢!

  9. ios – iPhone:我可以通过编程方式禁用自动关闭显示屏吗?

    3个我最近开始在Objective-C开发iPhone应用程序,并组装了一个小型通用视频播放器,可以让我在iPhone上观看电视节目,电影等.除了一件小事之外,一切都在完美无缺.如果我在该时间范围内没有点击屏幕,显示屏会在一两分钟后关闭并变为黑色.我想知道在我的应用程序打开时是否可以以编程方式保持显示.我已经尝试将idleTimerdisabled设置为true,但没有成功.我的设备是越狱的,如果它有所作为,我也开放的解决方案只适用于越狱设备.解决方法在AppDelegate中添加:

  10. 使用iOS 9 beta 3时,一般设置中没有配置文件选项卡

    当我尝试运行我的应用程序在iOS9beta3,以及beta4&5,我收到一个错误说不信任的企业开发人员UntrustedEnterpriseDeveloper“iPhoneDeveloper:name(id)”hasnotyetbeentrustedonthisiPhone.Untilthisdeveloperhasbeentrusted,theirenterpriseappswillnotbea

随机推荐

  1. Swift UITextField,UITextView,UISegmentedControl,UISwitch

    下面我们通过一个demo来简单的实现下这些控件的功能.首先,我们拖将这几个控件拖到storyboard,并关联上相应的属性和动作.如图:关联上属性和动作后,看看实现的代码:

  2. swift UISlider,UIStepper

    我们用两个label来显示slider和stepper的值.再用张图片来显示改变stepper值的效果.首先,这三个控件需要全局变量声明如下然后,我们对所有的控件做个简单的布局:最后,当slider的值改变时,我们用一个label来显示值的变化,同样,用另一个label来显示stepper值的变化,并改变图片的大小:实现效果如下:

  3. preferredFontForTextStyle字体设置之更改

    即:

  4. Swift没有异常处理,遇到功能性错误怎么办?

    本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请发送邮件至dio@foxmail.com举报,一经查实,本站将立刻删除。

  5. 字典实战和UIKit初探

    ios中数组和字典的应用Applicationschedule类别子项类别名称优先级数据包contactsentertainment接触UIKit学习用Swift调用CocoaTouchimportUIKitletcolors=[]varbackView=UIView(frame:CGRectMake(0.0,0.0,320.0,CGFloat(colors.count*50)))backView

  6. swift语言IOS8开发战记21 Core Data2

    上一话中我们简单地介绍了一些coredata的基本知识,这一话我们通过编程来实现coredata的使用。还记得我们在coredata中定义的那个Model么,上面这段代码会加载这个Model。定义完方法之后,我们对coredata的准备都已经完成了。最后强调一点,coredata并不是数据库,它只是一个框架,协助我们进行数据库操作,它并不关心我们把数据存到哪里。

  7. swift语言IOS8开发战记22 Core Data3

    上一话我们定义了与coredata有关的变量和方法,做足了准备工作,这一话我们来试试能不能成功。首先打开上一话中生成的Info类,在其中引用头文件的地方添加一个@objc,不然后面会报错,我也不知道为什么。

  8. swift实战小程序1天气预报

    在有一定swift基础的情况下,让我们来做一些小程序练练手,今天来试试做一个简单地天气预报。然后在btnpressed方法中依旧增加loadWeather方法.在loadWeather方法中加上信息的显示语句:运行一下看看效果,如图:虽然显示出来了,但是我们的text是可编辑状态的,在storyboard中勾选Editable,再次运行:大功告成,而且现在每次单击按钮,就会重新请求天气情况,大家也来试试吧。

  9. 【iOS学习01】swift ? and !  的学习

    如果不初始化就会报错。

  10. swift语言IOS8开发战记23 Core Data4

    接着我们需要把我们的Rest类变成一个被coredata管理的类,点开Rest类,作如下修改:关键字@NSManaged的作用是与实体中对应的属性通信,BinaryData对应的类型是NSData,CoreData没有布尔属性,只能用0和1来区分。进行如下操作,输入类名:建立好之后因为我们之前写的代码有些地方并不适用于coredata,所以编译器会报错,现在来一一解决。

返回
顶部