推广

swift 5.0 枚举

iseeyu3年前 (2024-02-21)推广143

WeChatdfdb8bfa7f0a84545d010ef18af70a98.png

一. 枚举的基本用法
enum Direction {
    case north
    case south
    case east
    case west
}
也可以写成一行
enum Direction {
    case north, south, east, west
}
给枚举进行赋值
var dir = Direction.west
dir = Direction.east
dir = .north
print(dir)
 // north 如果已知枚举的类型,Direction可以省略
枚举用switch进行判断
switch dir {
    case .north:
        print("north")
    case .south:
        print("south")
    case .east:
        print("east")
    case .west:
        print("west")
}
二. 关联值
有时将枚举的成员值跟其他类型的值关联存储在一起,会非常有用
enum Score {
    case points(Int)
    case grade(Character)
}

var score = Score.points(96)
score = .grade("A")

switch score {
    case let .points(i):
        print(i, "points")
    case let .grade(i):
        print("grade", i)
}
// grade A
枚举的成员值跟其他类型的值关联存储在一起,应用举例。
如果你有一个时间显示控件,可以显示年月日,就是xxxx-xx-xx这种样式,也可以显示自定义字符串类型,用下面的代码进行判断是不是更加的方便。
enum Date {
    case digit(year: Int, month: Int, day: Int)
    case string(String)
}

var date = Date.digit(year: 2011, month: 9, day: 10)
date = .string("2011-09-10")
switch date {
    case .digit(let year, let month, let day):
        print(year, month, day)
    case let .string(value):
        print(value)
}

必要时let也可以改为var
三. 原始值
枚举成员可以使用相同类型的默认值预先对应,这个默认值叫做:原始值
enum Grade : String {
    case perfect = "A"
    case great = "B"
    case good = "C"
    case bad = "D"
}
print(Grade.perfect.rawValue) // A
print(Grade.great.rawValue) // B
print(Grade.good.rawValue) // C
print(Grade.bad.rawValue) // D

注意:原始值不占用枚举变量的内存

原始值的应用举例
Alamofire swift版AFN

Alamofire

四. 隐式原始值
如果枚举的原始值类型是Int、String,Swift会自动分配原始值
下面的两段代码效果一样
enum Direction : String {
    case north = "north"
    case south = "south"
    case east = "east"
    case west = "west"
}

// 等价于
enum Direction : String {
    case north, south, east, west
}
print(Direction.north) // north
print(Direction.north.rawValue) // north

我们指定了 Direction 是字符串类型,系统会默认生成原始值,所以上面的两段代码效果一样

enum Season : Int {
    case spring, summer, autumn, winter
}
print(Season.spring.rawValue) // 0
print(Season.summer.rawValue) // 1
print(Season.autumn.rawValue) // 2
print(Season.winter.rawValue) // 3

// 等价于
enum Season : Int {
    case spring = 1, summer, autumn = 4, winter
}
print(Season.spring.rawValue) // 1
print(Season.summer.rawValue) // 2
print(Season.autumn.rawValue) // 4
print(Season.winter.rawValue) // 5

我们指定了 Season 是Int类型,系统会默认生成原始值,系统会从0开始,如果第一个赋值的不是0,中间的会按照顺序生成

五. 递归枚举
递归枚举是拥有另一个枚举作为枚举成员关联值的枚举,实际上就是Swift中枚举关联值的特性和递归算法在Swift开发中的运用。
定义递归枚举时,需要使用indirect关键字明确枚举成员它是可以递归的。
enum ArithmeticExpression { 
    case number(Int) 
    indirect case addition(ArithmeticExpression, ArithmeticExpression) 
    indirect case multiplication(ArithmeticExpression, ArithmeticExpression) 
}

可以在枚举之前写indirect来让整个枚举成员在需要时可以递归:

indirect enum ArithmeticExpression {
    case number(Int)
    case addition(ArithmeticExpression, ArithmeticExpression)
    case multiplication(ArithmeticExpression, ArithmeticExpression)
}
举例说明:

以下代码使用ArithmeticExpression枚举类型定义枚举常量对数学表达式5、4、2、5 + 4、(5 + 4) * 2进行表示。

let five = ArithmeticExpression.number(5)
let four = ArithmeticExpression.number(4)
let sum = ArithmeticExpression.addition(five, four)
let product = ArithmeticExpression.multiplication(sum, ArithmeticExpression.number(2))

以下函数通过对上述枚举常量的判断从而求出对应的数学表达式的值。

func evaluate(_ expression: ArithmeticExpression) -> Int {
    switch expression {
    case let .number(value):
        return value
    case let .addition(left, right):
        return evaluate(left) + evaluate(right)
    case let .multiplication(left, right):
        return evaluate(left) * evaluate(right)
    }
}
print(evaluate(five))    // 打印 "5"
print(evaluate(four))    // 打印 "4"
print(evaluate(sum))     // 打印 "9"
print(evaluate(product)) // 打印 "18"

关于swift的更多知识
请点击 swift文集!

扫描二维码推送至手机访问。

版权声明:本文由西安泽虎代运营发布,如需转载请注明出处。

转载请注明出处https://www.0291.com.cn/post/56761.html

相关文章

西安企业做百度推广,一个月花三千和花三万到底差在哪?

4|最近跟几个西安的老板聊天,发现一个挺有意思的现象:同样做百度推广,有人一个月花三千块,询盘不断;有人一个月砸三万,水花都没见着。问他们区别在哪,大多数人说不清楚,只知道'钱花了,没效果'。 5| 6|百度推广这东西,说复杂也复杂,说简单也简单。核心就一件事:让你的潜在客户搜某个词的时候,你的信息...

我想当策划,大学应该选什么专业?

我想当策划,大学应该选什么专业?

学,广告,传播,公关,这些专业其实都可以。另外也可以学像汉语言文学,以及一些跟文学相关的一些专业,会对你找工作有帮助。但是,你想从事这个这份职业,除了专业的学习之外,更多的是,你要在上学的时候积极参与一些更营销策划相关的社会实践。比如说你可以做一些兼职,比如说帮别人去写稿,...

服装市场营销策略分析,“定位不慎满盘皆输”

服装市场营销策略分析,“定位不慎满盘皆输”

不同的区域需要不同的策略,而不同的营销策略需要不同的销售思路来配合。因此,在研究女装产品销售思路之前,最好先对于市场与营销策略做一次深入地了解。1.市场区域化(market segmentation):目标营销的第一步,是将整个市场拆分成若干个同性质的小市场。2.目标市场的...

晚间悦读丨你的思维方式,决定你的人生高度!

晚间悦读丨你的思维方式,决定你的人生高度!

越长大,越发现,能够决定你人生高度的,往往是你的认知层次。 你的认知在哪个层级,你的人生就处在什么状态。你认知的高度,决定了你人生的高度。 那如何才能升级方式、提升认知能力呢?可以从这三个方面做出改变。 NO. 1 改变态度 有人...

编写项目营销策划方案六大要点

编写项目营销策划方案六大要点

现在商业发展非常迅速,的需求非常的大,但是要做好营销策划是有一定难度的,我把自己做营销策划的一些体会在这里分享给朋友们。营销策划方案六大要点我们先说项目营销策划方案这个话题。大部分的营销策划人都是在企业里工作,大部分项目之初都是来源于一个想法,创始人、老板或者创始团队的一个...

【商场营销策划】如何进行商场营销策划?

【商场营销策划】如何进行商场营销策划?

商场是策划者们关注的永恒话题,那么究竟该如何作好商场营销策划呢?掌握以下这几点营销策略设计原则,至关重要!1.义利兼顾的原则。商场在获取利润的同时要充分考虑到消费者的合法利益和商场的长远利益。在作商场活动营销策略方案的时候应该将这一点作为首要的原则。对商场有利而对顾客不利的...

现在,非常期待与您的又一次邂逅

我们努力让每一部企业宣传片和抖音短视频成为商业大片