当前位置:首页 > 科技  > 软件

Swift 枚举类型,你知道几个?

来源: 责编: 时间:2024-01-18 17:40:51 277观看
导读本文我们将介绍在 Swift 中如何定义枚举、遍历枚举、枚举原始值、枚举关联值等相关的内容。如果你尚未安装 Xcode 和配置 Swift 开发环境,请您先阅读这篇文章。接下来,我们启动 Xcode,然后选择 "File" > "New" > "Playgr

本文我们将介绍在 Swift 中如何定义枚举、遍历枚举、枚举原始值、枚举关联值等相关的内容。如果你尚未安装 Xcode 和配置 Swift 开发环境,请您先阅读这篇文章。dwT28资讯网——每日最新资讯28at.com

接下来,我们启动 Xcode,然后选择 "File" > "New" > "Playground"。创建一个新的 Playground 并命名为 "Enumerations"。dwT28资讯网——每日最新资讯28at.com

在 Swift 中,枚举(Enum)是一种特殊的数据类型,它允许你定义一组相关的值。这些值是你在程序中会用到的一些具体选项。dwT28资讯网——每日最新资讯28at.com

定义一个枚举

在 Swift 中,我们使用 enum 关键字定义一个枚举,在枚举体内使用 case 关键字定义不同的情况,每个情况表示枚举的一个成员。dwT28资讯网——每日最新资讯28at.com

Swift CodedwT28资讯网——每日最新资讯28at.com

enum Color {    case red    case green    case blue}let greenColor = Color.greenprint(greenColor)// Output: green

在以上代码中,我们定义了一个名为 Color 的枚举,包含了三种颜色。dwT28资讯网——每日最新资讯28at.com

TypeScript CodedwT28资讯网——每日最新资讯28at.com

enum Color {    Red,    Green,    Blue}let color: Color = Color.Green;console.log(color);// Output: 1

使用 switch 处理枚举

有了 Color 枚举后,我们可以使用 switch 语句来处理枚举。dwT28资讯网——每日最新资讯28at.com

Swift CodedwT28资讯网——每日最新资讯28at.com

enum Color {    case red    case green    case blue}func describeColor(color: Color) {    switch color {    case .red:        print("Color is red.")    case .green:        print("Color is green.")    case .blue:        print("Color is blue.")    }}describeColor(color: .blue)// Output: Color is blue.

TypeScript CodedwT28资讯网——每日最新资讯28at.com

enum Color {    Red,    Green,    Blue}function describeColor(color: Color): void {    switch (color) {        case Color.Red:            console.log("Color is red.");            break;        case Color.Green:            console.log("Color is green.");            break;        case Color.Blue:            console.log("Color is blue.");            break;    }}describeColor(Color.Blue);// Output: "Color is blue."

遍历枚举的成员

在 Swift 中,我们可以使用 CaseIterable 协议来使枚举遵循可迭代的协议,从而实现对枚举成员的遍历。dwT28资讯网——每日最新资讯28at.com

Swift CodedwT28资讯网——每日最新资讯28at.com

enum Color: CaseIterable {    case red, green, blue}for color in Color.allCases {    print(color)}/**Output: redgreenblue*/

在上面的代码中,我们让 Color 枚举遵循 CaseIterable 协议,以便枚举该枚举的所有成员。dwT28资讯网——每日最新资讯28at.com

TypeScript CodedwT28资讯网——每日最新资讯28at.com

enum Color {    Red,    Green,    Blue}for(let colorKey in Color) {    console.log(colorKey)}/**Output: "0" "1" "2" "Red" "Green" "Blue" */

枚举原始值

Swift 中的枚举可以关联原始值,这些原始值可以是整数、浮点数、字符串等类型。枚举的原始值为每个成员提供了一个默认值,方便我们在不同的上下文中使用。dwT28资讯网——每日最新资讯28at.com

数值原始值

Swift CodedwT28资讯网——每日最新资讯28at.com

enum Weekday: Int {    case sunday = 1    case monday    case tuesday    case wednesday    case thursday    case friday    case saturday}let today: Weekday = .tuesdaylet rawValue: Int = today.rawValueprint(rawValue)// Output: 3

在以上代码中,我们定义了一个表示星期的枚举 Weekday,并为每个成员显式赋予了一个原始值。默认情况下,第一个成员的原始值为 1,后续成员的原始值递增。dwT28资讯网——每日最新资讯28at.com

TypeScript CodedwT28资讯网——每日最新资讯28at.com

enum Weekday {    Sunday = 1,    Monday,    Tuesday,    Wednesday,    Thursday,    Friday,    Saturday}let today: Weekday = Weekday.Tuesday;let rawValue: number = today;console.log(rawValue);// Output: 3

在 TypeScript 中,数值枚举的原始值也是递增的,与 Swift 中的数值枚举相似。dwT28资讯网——每日最新资讯28at.com

字符串原始值

Swift CodedwT28资讯网——每日最新资讯28at.com

enum Direction: String {    case up = "UP"    case down = "DOWN"    case left = "LEFT"    case right = "RIGHT"}let move: Direction = .uplet directionString: String = move.rawValueprint(directionString)// Output: UP

在以上代码中,我们定义了一个字符串枚举 Direction,为每个成员显式赋予了一个字符串原始值。dwT28资讯网——每日最新资讯28at.com

TypeScript CodedwT28资讯网——每日最新资讯28at.com

enum Direction {    Up = "UP",    Down = "DOWN",    Left = "LEFT",    Right = "RIGHT"}let move: Direction = Direction.Up;let directionString: string = move;console.log(directionString);// Output: "UP"

字符串枚举的原始值在 TypeScript 中也是类似的,允许为每个成员指定字符串类型的原始值。dwT28资讯网——每日最新资讯28at.com

枚举关联值

Swift 中的枚举不仅可以有原始值,还可以携带关联值。关联值允许在定义枚举的时候指定每个成员携带的数据类型。这样,每个枚举成员都可以携带不同类型的数据。dwT28资讯网——每日最新资讯28at.com

Swift CodedwT28资讯网——每日最新资讯28at.com

import Foundation// 定义 Shape 枚举描述不同的图形enum Shape {    case circle(radius: Double)    case square(side: Double)    case rectangle(width: Double, height: Double)}// 使用关联值创建不同的图形let circle: Shape = .circle(radius: 3.0)let square: Shape = .square(side: 4.0)let rectangle: Shape = .rectangle(width: 3.0, height: 4.0)

在以上代码中,我们定义了一个 Shape 枚举,其中的每个成员都可以携带不同类型的关联值,表示不同的图形。有了 Shape 枚举之后,我们可以创建一个 calculateArea 函数,来计算不同图形的面积。dwT28资讯网——每日最新资讯28at.com

Swift CodedwT28资讯网——每日最新资讯28at.com

func calculateArea(shape: Shape) -> Double {    switch shape {    case .circle(let radius):        return Double.pi * pow(radius, 2)    case .square(let side):        return pow(side, 2)    case .rectangle(let width, let height):        return width * height    }}// 计算不同图形的面积let areaOfCircle = calculateArea(shape: circle) // 28.27433388230814let areaOfSquare = calculateArea(shape: square) // 16let areaOfRectangle = calculateArea(shape: rectangle) // 12

在以上代码中,我们定义了一个函数 calculateArea,根据图形的类型计算图形的面积。通过关联值,我们可以轻松地提取不同图形的属性进行计算。在 TypeScript 中,由于并没有直接对应 Swift 枚举关联值的语法,我们可以使用 TypeScript 的联合类型来模拟这种行为。dwT28资讯网——每日最新资讯28at.com

TypeScript CodedwT28资讯网——每日最新资讯28at.com

interface Circle {    kind: 'circle';    radius: number;}interface Square {    kind: 'square';    side: number;}interface Rectangle {    kind: 'rectangle';    width: number;    height: number;}// 使用联合类型表示不同的图形type Shape = Circle | Square | Rectangle;

在以上代码中,我们使用接口和联合类型来定义不同图形的数据结构。之后,我们也可以定义一个 calculateArea 函数来计算不同图形的面积。dwT28资讯网——每日最新资讯28at.com

TypeScript CodedwT28资讯网——每日最新资讯28at.com

function calculateArea(shape: Shape): number {    switch (shape.kind) {        case 'circle':            return Math.PI * Math.pow(shape.radius, 2);        case 'square':            return Math.pow(shape.side, 2);        case 'rectangle':            return shape.width * shape.height;        default:            throw new Error('Invalid shape');    }}const circle: Circle = { kind: "circle", radius: 3.0 }const square: Square = { kind: "square", side: 4.0 }const rectangle: Rectangle = { kind: "rectangle", width: 3.0, height: 4.0 }// 计算不同图形的面积const areaOfCircle = calculateArea(circle); // 28.274333882308138const areaOfSquare = calculateArea(square); // 16const areaOfRectangle = calculateArea(rectangle); // 12

枚举中定义计算属性

Swift CodedwT28资讯网——每日最新资讯28at.com

enum Color {    case red, green, blue    var hexValue: String {        switch self {        case .red:            return "#FF0000"        case .green:            return "#00FF00"        case .blue:            return "#0000FF"        }    }}let greenColor = Color.greenprint(greenColor.hexValue)// Output: #00FF00

在以上代码中,我们为 Color 枚举增加了一个计算属性 hexValue,用于表示颜色的十六进制值。dwT28资讯网——每日最新资讯28at.com

枚举中定义方法

Swift CodedwT28资讯网——每日最新资讯28at.com

enum Color {    case red, green, blue    func description() -> String {        switch self {        case .red:            return "Color is red."        case .green:            return "Color is green."        case .blue:            return "Color is blue."        }    }}let greenColor = Color.greenprint(greenColor.description())// Output: Color is green.

在以上代码中,我们在 Color 枚举中添加了一个 description 方法,用于返回颜色的描述信息。dwT28资讯网——每日最新资讯28at.com

本文我们介绍了在 Swift 中如何定义枚举、遍历枚举、枚举原始值、枚举关联值等相关的内容。通过与 TypeScript 语法的对比,希望能帮助您更好地理解 Swift 的相关特性。dwT28资讯网——每日最新资讯28at.com


dwT28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-64510-0.htmlSwift 枚举类型,你知道几个?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 使用 Spring Boot 创建自己的 ChatGPT 应用程序

下一篇: 透明度怎么转换为16进制值

标签:
  • 热门焦点
  • 小米降噪蓝牙耳机Necklace分享:听一首歌 读懂一个故事

    在今天下午的小米Civi 2新品发布会上,小米还带来了一款新的降噪蓝牙耳机Necklace,我们也在发布结束的第一时间给大家带来这款耳机的简单分享。现在大家能见到最多的蓝牙耳机
  • 小米平板5 Pro 12.4简评:多专多能 兼顾影音娱乐的大屏利器

    疫情带来了网课,网课盘活了安卓平板,安卓平板市场虽然中途停滞了几年,但好的一点就是停滞的这几年行业又有了新的发展方向,例如超窄边框、高刷新率、多摄镜头组合等,这就让安卓
  • 服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 年轻人的“职场羞耻感”,无处不在

    作者:冯晓亭 陶 淘 李 欣 张 琳 马舒叶来源:燃次元“人在职场,应该选择什么样的着装?”近日,在网络上,一个与着装相关的帖子引发关注,在该帖子里,一位在高级写字楼亚洲金
  • iQOO 11S屏幕细节公布:首发三星2K E6全感屏 安卓最好的直屏手机

    日前iQOO手机官方宣布,新一代电竞旗舰iQOO 11S将会在7月4日19:00正式与大家见面。随着发布时间的日益临近,官方关于该机的预热也更加密集,截至目前已
  • 7月4日见!iQOO 11S官宣:“鸡血版”骁龙8 Gen2+200W快充加持

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
Top