前端之家收集整理的这篇文章主要介绍了
Swift面向对象-枚举,
前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
- //
- // main.swift
- // Swift面向对象-枚举
- //
- // Created by Goddog on 15/5/30.
- // Copyright (c) 2015年 Goddog. All rights reserved.
- //
- /*
- 1.Swift的枚举不像C那样简单,也不像Java的枚举(其实Java的枚举是一种特殊的类);
- 2.Swift的枚举是完全重新定义的一个类型,管理一组有限值的集合;
- 3.Swift的枚举具有面向对象的特征,支持计算属性、支持实例方法和类方法、支持定义构造器来完成初始化;
- 4.Swift可通过扩展来增强原有枚举的功能,允许通过指定协议来提供标准的功能。
-
-
- */
-
-
- import Foundation
-
-
- /**
- * 使用多个个case列出多个实例
- */
- enum Season
- {
- case Spring
- case Summer
- case Fall
- case Winter
- }
-
- /**
- * 使用一个case列出多个实例(我喜欢这种写法)
- */
- enum Weekday
- {
- case Monday,Tuesday,Wednessday,Thursday,Friday,Saturday,Sunday
- }
-
- //使用枚举声明变量
- var sn : Season
- var wd : Weekday
-
- //已有的枚举实例赋值
- sn = Season.Summer
- wd = .Saturday //还可以这样省略哦
-
- //枚举值和Switch一起使用
- switch(wd)
- {
- case .Monday:
- println("周一,上班")
- case .Tuesday:
- println("周二")
- case .Wednessday:
- println("周三")
- case .Thursday:
- println("周四")
- case .Friday:
- println("周五")
- case .Saturday:
- println("周六")
- case .Sunday:
- println("周日")
-
- }
-
- switch(wd)
- {
- case .Monday:
- println("上班咯")
- case .Tuesday,.Wednessday,.Thursday: //hi,还可以这样子写,java可没这种写法哦
- println("周二、周三、周四")
- default:
- println("周五呢还是放假咯")
- }
-
-
- /**
- 原始值
- 1.枚举要么所有的都指定原始值、要么完全不指定原始值;
- 2.原始值可以自动判断,也可以显示指定;
- */
-
- //定义枚举,并制定该枚举原始值的类型为Int
- enum Numbers : Int
- {
- //用case列出六个枚举实例
- case one,two = 2,four = 4,five,six,seven //系统自动判断
- //这个地方程序会自动推断one=1,five=5,seven=7 特别神奇
- }
-
- //如果非Int类型,比如事String、Character
- enum Human : Character
- {
- case Man = "M" //Human都是显示指定
- case Woman = "W"
- }
-
- var num = Numbers.five
- //获取枚举的原始值
- println("five的原始值是\(num.rawValue)")
-
- //根据原始值获取枚举值
- var myHuman = Human(rawValue: "W")
- if myHuman != nil
- {
- switch(myHuman!) //注意:使用!进行强制解析
- {
- case .Man:
- println("男人")
- case .Woman:
- println("女人")
- }
- }
-
- /**
- 关联值
- 1.关联值可以称为“属性值”或"成员值",各个实例的内部状态:比如上面的男人有哪些特质(胡子,.....)
-
- */
- //定义枚举
- enum Planet
- {
- //不同的枚举可以携带数量不等、类型不等的关联值
- case Mercury(weight:Double,density:Double,name:String) //还指定了名称哦
- case Earth(Double,String)
- case Saturn
- }
-
- var mercury = Planet.Mercury(weight: 0.05,density: 5.43,name: "水星")
- var venus = Planet.Earth(1.0,"地球")
- var saturn = Planet.Saturn
- //如果程序要访问枚举的关联值,那就需要声明额外的变量和常量,并将枚举值的关联值绑定到这些变量和常量。
- switch(venus)
- {
- case Planet.Earth(var weight,var name):
- println("该行星的名字为:\(name),质量是\(weight)")
- default:
- break
- }
- //如果打算将某个枚举值的所有关联值都提取为变量和常量,也可以将一个var或let放置在枚举成员之前即可
- switch(mercury)
- {
- //将Planet.Earth的关联值绑定到weight、density常量
- case let .Earth(weight,density):
- println("该行星的质量相当于:\(weight)个地球,密度为\(density)")
- //将Planet.Mercury的关联值绑定到w、d、n常量
- case let .Mercury(weight:w,density:d,name:n):
- println("该行星的质量\(w),密度\(d),名字\(n)")
- default:
- break
- }
-
-
- println("Hello,World!")
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-