Swift面向对象-枚举

前端之家收集整理的这篇文章主要介绍了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!")
















猜你在找的Swift相关文章