//
// Enumerations.swift
// SwiftCode
//
// Created by Alisa on 2021/9/26.
// Copyright © 2021 Alisa. All rights reserved.
//
import Foundation
//枚举的用法
/*
枚举为一组相关值定义了一个通用类型,从而可以让你在代码中类型安全的操作这些值。
swift中的枚举用法:
不需要枚举中的每个成员都提供值,如果一个值要被提供给每一个枚举成员,那么这个值可以是字符串、字符、任意的整数值、或者浮点类型。
枚举的成员可以指定任意类型的值来与不同的成员值关联储存,这更像是其它语言中的union或variant的效果。
你可以定义一组相关成员的合集作为枚举的一部分,每一个成员都可以有不同类型的值的合集与其关联。
*/
//SurnameOne、SurnameTwo两种写法是一样的
enum SurnameOne{
case 张
case 王
case 李
case 赵
}
enum SurnameTwo{
case 张,王,李,赵
}
//在创建枚举时,可以设置枚举值的类型
enum ValueSender : Int {
case one = 1 //第一个枚举值的原始值为1
case two //默认原始值为2
case three //默认原始值为3
case four //默认原始值为4
}
//创建一个有关联值的枚举
enum Shape{
case circle(center:(Double, Double), radius:Double)
case rect(center:(Double, Double), width:Double, height:Double)
case triangle(point1:(Double, Double), point2:(Double, Double), point3:(Double, Double))
}
class Enumerations : NSObject
{
//枚举的初始化
func emumerationsInit(){
var sur : SurnameOne //创建一个姓氏枚举类型的变量
sur = SurnameOne.赵; //对sur变量进行赋值
sur = .李 //当前变量sur已经确认为某个枚举类型,对sur进行赋值时可以使用这种省略的方式
print("sur val:\(sur)")
}
//枚举与switch联用
func emumerationsAndSwitch(){
let vs = ValueSender.three;
//在开发中,枚举类型经常和switch-case结合使用以实现选择结构
switch vs {
case .one:
print("vs val:one")
case .two:
print("vs val:two")
case .three:
print("vs val:three")
case .four:
print("vs val:four")
}
}
//枚举的相关值
func correlationValue(){
let shape1 = Shape.circle(center:(2.2, 3.4), radius: 1.5)
let shape2 = Shape.rect(center:(1.2, 3.2), width: 5.0, height: 6.0)
let shape3 = Shape.triangle(point1:(2.3, 2.4), point2:(2.3, 2.4), point3: (2.3, 2.4))
let arrayOne = [shape1, shape2, shape3]
for item in arrayOne {
switch item {
case .circle(let center, let radius):
print("this is circle, center:\(center), radius:\(radius)")
case .rect(let center, let width, let height):
print("this is rec, center:\(center), width:\(width), height:\(height)")
case .triangle(let point1, let point2, let point3):
print("this is rect, point1:\(point1), point2:\(point2), point3:\(point3)")
}
}
}
}