您的位置:首页 > 移动开发 > Swift

[swift学习之三]枚举练习

2016-05-05 13:35 393 查看
//------------------------//
enum WeekDays{
case Monday,TuesDay,WednesDay,ThrusDay
case Friday
}
func ShowDayStr(aday:WeekDays) -> Void {
switch aday {
/*亮点1:不用直接写变量了,类似with的用法~*/
case .Monday:
print("周一")
default:
print("除了周一的工作日")
}
/*亮点2:最原始的索引值了,即使指定了原始值,它还是保留原值,这里总是0~*/
print(aday.hashValue)
}
ShowDayStr(WeekDays.Monday)
/*
如果到这里,以为枚举内容就结束了。
但swift做了扩展,这也是单独写个博客原因。先说多出来的概念。
1: 原始值:
enum 枚举名 : 数据类型
{
case 成员名 = 默认值
枚举不支持继承,所以冒号后面只是原始值的类型,如字符、字符串、整数和浮点数等。
}
2:相关值
enum 枚举名{
case 成员名(Type1,Type2...)
}
我自己的理解:这两种枚举互相冲突,声明了带数据类型的,就写不了相关值;写相关值,就不能加数据类型。
*/
enum WeekDaysExtendWithRaw: String{
case Monday="星期一",TuesDay="星期二",WednesDay="星期三",ThrusDay
case Friday
func Discription() -> String {
switch self {
case .Monday:
return "今天是星期一"
default:
return rawValue
}
}
}
/*亮点3:如果指定了原始值的数据类型,就多了个构造方法,但返回可能是空*/
var Day = WeekDaysExtendWithRaw.init(rawValue: "星期一")
Day?.hashValue
print(Day?.Discription())
print(Day==WeekDaysExtendWithRaw.Monday)

enum WeekDaysExtendWithAssociated {
case Monday(String,String,Int),TuesDay,WednesDay(String,String,Int),ThrusDay
case Friday
func Discription() -> String {
switch self {
case .Monday(let a,let b, let c):
return "\(a)\(b)\(c)"
default:
return "除周一外的工作日"
}
}
}
var DayAssociated = WeekDaysExtendWithAssociated.WednesDay("Hello", "World", 8)
/*如果指定了相关值,就隐藏了hashValue以及与WeekDaysExtendWithAssociated.WednesDay做比较判断。
更不像原值的那样,能利用索引点运算出来,像这样
let RawValue = (DayAssociated,Day)
print(RawValue.0.Discription())
也许这样处理更安全吧,这个还没理解透彻~
*/
print(DayAssociated.Discription())

不知道总结的是否全面,不过上面的用法已经很强大了,足矣满足所有枚举的需求。

一个枚举都整这么热闹,看来swift真不是盖的~

参考:http://www.ituring.com.cn/tupubarticle/3592
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: