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