//: Playground - noun: a place where people can play
import UIKit
/*
* 本节主要内容:
* 1.枚举类型声明和初始化(**)
* 2.rawValue: 源值
* 3.associated value关联值(****)
*/
// 枚举类型特点: 有限个可能性 + 初始化只能有一种可能性
// 结构体特点: 多个属性一起描述对象; CLLocation: 纬度 + 经度
// 声明描述一周七天的枚举类型
/*
* 1.枚举类型首字母必须大写
* 2.多个case关键词
* 3.没有逗号
* 4.可能性中的单词没有特定要求
*/
enum Week {
// 可能性
case Monday // 没有关联任意类型的值
case Tuesday
case Wednesday
case Thursday
case Friday
case Saturday
case Sunday
}
// 声明方式二:
enum WeekNew {
case Monday,Tuesday,Wednesday,Thursday,Friday,Saturday,Sunday
}
// 实例化
// 隐式
let currentDay = Week.Wednesday
// 显式
let tomorrowDay: Week = Week.Thursday
// 声明函数: 参数是Week枚举类型, 返回String
// 枚举类型名字可以省略(推荐)
func workDay(week: Week) -> String {
switch week {
case .Monday, .Tuesday, .Wednesday, .Thursday, .Friday:
return "This is the working day!"
case .Saturday, .Sunday:
return "This is the weekend!"
}
}
// 调用
let resultStr = workDay(week: currentDay)
// 声明Week枚举类型关联整型
/*
* 1.枚举类型如何和某个类型进行关联, 每个case都会和该类型的默认值进行绑定
* 2.rawValue(源值):查看绑定值
* 3.除了默认的值, 可以绑定任意不连续的值(类型一致), 但是必须唯一(**)
* 4.两种方式构造枚举对象: init构造方法; 点语法(推荐)
* 5.枚举类型只能关联Int/Float/Double/String/Character数据类型
*/
enum WeekWithInt: Int {
case Monday = 1 // 默认值0
case Tuesday = 3 // 默认值1
case Wednesday = 5
case Thursday = 7
case Friday = 9
case Saturday
case Sunday
}
// 实例化: 构造+解包
if let newDay = WeekWithInt.init(rawValue: 10) {
print("newDay's rawValue is \(newDay.rawValue)")
}
var anotherDay = WeekWithInt.Friday
anotherDay.rawValue
// 声明描述苹果公司产品的枚举类型
/*
* 1.关联String, 每个case绑定的默认值为case的名字
* 2.也可以任何绑定String类型值
*/
enum Devices: String {
case iPodTouch = "iPod"
case iPhone
case iPad
case MacBookPro = "MacBook Pro"
case iWatch
case AppleTV
case Nano
}
// 实例化
var currentDevice = Devices.MacBookPro
currentDevice.rawValue
// 声明描述HTTP协议错误码的枚举类型
enum HttpErrorCode: String {
case code400 = "Bad Request"
case code401 = "Unauthorized"
case code402 = "Payment Required"
case code403 = "Forbidden"
case code404 = "Not Found"
}
/* associated value(关联值): 重点+难点
* 引言: 声明阶段枚举关联某个类型, case的rawValue确定了, case的绑定值是一个常量, 不可以改变; 无法满足下面的需求: 声明阶段关联变量, 实例化阶段再关联值
* 第一阶段: 声明枚举类型
* 第二阶段: 实例化
*/
// 声明描述ATM状态的枚举类型
enum ATMStatus {
case Success(Int)
case Error(String)
case Waiting // (String)
// 添加方法(语法和声明函数一样)
// 使用频率较低
func getString() -> String {
return "hello"
}
}
// 实例化
let atmStatus = ATMStatus.Success(20)
atmStatus.getString()
// 实例化阶段对case关联特定类型的值
// 声明函数, 参数是取的钱数, 返回ATMStatus枚举类型
// 卡里的钱数
var balance = 1000
func withDraw(amount: Int) -> ATMStatus {
// 成功, 返回剩余的钱数
if balance >= amount {
balance -= amount
return ATMStatus.Success(balance)
} else {
// 失败, 返回错误原因
return ATMStatus.Error("Not enough money!")
}
}
let status = withDraw(amount: 600)
// 如何获取剩余的钱数, 或者获取错误原因
switch status {
case let .Success(leftMoney):
print("Left money is \(leftMoney)")
case let .Error(errorMsg):
print("Error message is \(errorMsg)")
case .Waiting:
print("Waiting for processing!")
}
// 验证枚举类型是值类型
enum Direction {
case North
case South
case West
case East
}
var oneDirection = Direction.East
var twoDirection = oneDirection
// 修改
oneDirection = .North
/*
* 课堂练习一:
* 1.声明一个枚举类型Month, 描述一年12个月
* 2.声明函数, 参数Month, 返回字符串, 描述"春/夏/秋/冬"
* 3.调用/验证函数
*/
/*
* 课堂练习二:
* 1.声明一个描述形状的枚举类型Shape, 正方形/矩形/圆/二维点
* 2.声明函数, 参数Shape, 返回该形状的面积Double
* 3.调用/验证函数
* 4.提示: 每个形状关联类型(associate value)
*/
Swift 系统学习 15 枚举
最新推荐文章于 2025-06-08 11:20:27 发布