Swift面向对象-枚举

来源:互联网 发布:流星网络电视2.68.2 编辑:程序博客网 时间:2024/06/11 11:48
////  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 : Seasonvar wd : Weekday//已有的枚举实例赋值sn = Season.Summerwd = .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.原始值可以自动判断,也可以显示指定;*///定义枚举,并制定该枚举原始值的类型为Intenum Numbers : Int{    //用case列出六个枚举实例    case one, two = 2, four = 4, five, six, seven      //系统自动判断    //这个地方程序会自动推断one=1,five=5,seven=7 特别神奇}//如果非Int类型,比如事String、Characterenum 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!")

0 0