[swift学习之三]枚举练习

//------------------------//
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

你可能感兴趣的:(enum)