枚举类型语法格式:
import UIKit
//写法一
enum Season{
case Spring
case Summer
case Autumn
case Winter
}
//写法二
enum Season2{
case Spring, Summer,Autumn, Winter
}
//写法三(原始值),也不一定是 Int型,可以是其他类型,如String等
enum Season3: int {
case Spring=1
case Summer=6
case Autumn=4
case Winter=8
}
//写法四(原始值)
enum Season4: int {
case Spring=1,Summer=2,Autumn=3, Winter=4
}
//写法五(原始值),Summer 会默认累加为2,依次类推Autumn。。
enum Season5: int {
case Spring=1,Summer,Autumn, Winter
}
//写法六(原始值),Spring 默认为0,依次类推Summer。。
enum Season6: int {
case Spring,Summer,Autumn, Winter
}
//用法
let curSeason: Season =Season.Spring
let curSeason3: Season3 = .Spring
let mySeason6:Season6 =.Autumn
print("the season 6 is \(mySeason6.rawValue)")// 打印结果为2
func getSeason(season: Season) ->String
{
switch season
{
case .Spring :
return "是春天"
case .Summer:
return "是夏天"
case .Autumn:
return "是秋天"
case .Winter:
return "是冬天"
}
}
getSeason(curSeason)
//原始值
let mySeason:Season=.Spring
mySeason.rawValue //值为1
let input=4
if let mySeason2=Season(rawValue:input) //调用构造函数 并 解包
print("this is \(mySeason3)")
}
//相关值(Associate vale) 设置关联值后不能设置rawValue
enum ATMStatus{
case syccess(Int)
case Error(String)
case Waiting //不关联值
}
var balance=1000
func widthdraw(amount:Int)->ATMStatus{
if balance>=amount{
balance-=amount
return .Success(balance)
}else{
return .Erron("Not enough money")
}
}
let result = withdraw(100)
//可以解析返回的关联值
switch result{
case let .Success(newBalance): //相当于解包
print("\(newBlance) Yuan left in your account")
case let .Error(errorMessage):
print("Error:\(errorMessage)")
case .Waiting:
pringt("waiting...")
}
//复杂关联
enum Shape
{
case Square(side:Double)
case Rectangele(width:Double,height:Double)
case Circle(centerx:Double,centery:Double,radius:Double)
case Point
}
//用法
let square=Shape.Square(side:10)
let rectangle=Shape.Rectangle(width:20,height:30)
let circle=Shape.Circle(centerx:0,centery:0,radius:30)
let point =Shape.Point
func area(shape:Shape)->Double{
switch shape{
case let .Square(side): //解包边长 算面积
return side*side
case let .Rectangle(width ,height):
return width*height
case let .Circle(_,_,r): //使用_ 忽略没用的参数
return M_PI*r*r //M_PI 是π的静态常量变量
case .Point
return 0
}
}
ares(square)
import UIKit
//写法一
enum Season{
case Spring
case Summer
case Autumn
case Winter
}
//写法二
enum Season2{
case Spring, Summer,Autumn, Winter
}
//写法三(原始值),也不一定是 Int型,可以是其他类型,如String等
enum Season3: int {
case Spring=1
case Summer=6
case Autumn=4
case Winter=8
}
//写法四(原始值)
enum Season4: int {
case Spring=1,Summer=2,Autumn=3, Winter=4
}
//写法五(原始值),Summer 会默认累加为2,依次类推Autumn。。
enum Season5: int {
case Spring=1,Summer,Autumn, Winter
}
//写法六(原始值),Spring 默认为0,依次类推Summer。。
enum Season6: int {
case Spring,Summer,Autumn, Winter
}
//用法
let curSeason: Season =Season.Spring
let curSeason3: Season3 = .Spring
let mySeason6:Season6 =.Autumn
print("the season 6 is \(mySeason6.rawValue)")// 打印结果为2
func getSeason(season: Season) ->String
{
switch season
{
case .Spring :
return "是春天"
case .Summer:
return "是夏天"
case .Autumn:
return "是秋天"
case .Winter:
return "是冬天"
}
}
getSeason(curSeason)
//原始值
let mySeason:Season=.Spring
mySeason.rawValue //值为1
let input=4
if let mySeason2=Season(rawValue:input) //调用构造函数 并 解包
print("this is \(mySeason3)")
}
//相关值(Associate vale) 设置关联值后不能设置rawValue
enum ATMStatus{
case syccess(Int)
case Error(String)
case Waiting //不关联值
}
var balance=1000
func widthdraw(amount:Int)->ATMStatus{
if balance>=amount{
balance-=amount
return .Success(balance)
}else{
return .Erron("Not enough money")
}
}
let result = withdraw(100)
//可以解析返回的关联值
switch result{
case let .Success(newBalance): //相当于解包
print("\(newBlance) Yuan left in your account")
case let .Error(errorMessage):
print("Error:\(errorMessage)")
case .Waiting:
pringt("waiting...")
}
//复杂关联
enum Shape
{
case Square(side:Double)
case Rectangele(width:Double,height:Double)
case Circle(centerx:Double,centery:Double,radius:Double)
case Point
}
//用法
let square=Shape.Square(side:10)
let rectangle=Shape.Rectangle(width:20,height:30)
let circle=Shape.Circle(centerx:0,centery:0,radius:30)
let point =Shape.Point
func area(shape:Shape)->Double{
switch shape{
case let .Square(side): //解包边长 算面积
return side*side
case let .Rectangle(width ,height):
return width*height
case let .Circle(_,_,r): //使用_ 忽略没用的参数
return M_PI*r*r //M_PI 是π的静态常量变量
case .Point
return 0
}
}
ares(square)