推广

swift 5.0 枚举

iseeyu2年前 (2024-02-21)推广133

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

相关文章

两个方法让您的企业网站迅速得到好排名。

两个方法让您的企业网站迅速得到好排名。

导读:大家都知道一个好的排名在很大一程度上将决定了网站流量的大与小,比如说一个做了推广的网站要比一个没有做推广的网站的流量要多的多,不信可以自己去百度搜索一下营销型网站建设这样的关键词,左边就会出来17个网站,而排在最前面的7个网站就是做了推广的网站,在有意和无疑中将拦截了很多的流量,那企业要想从网...

爱奇艺频道信息流广告知识大全

爱奇艺频道信息流广告知识大全

  随着互联网技术的不断进步,大数据和人工智能也得到了长足的发展。爱奇艺效果广告依托于雄厚的技术实力,发展迅速,实现了海量触达、定向精准、效果显著的广告投放。爱奇艺的广告资源丰富,今天我们主要来了解一下它的展示类广告。 一、开屏广告 开屏广告是在爱奇艺APP启动时展现的,...

从搜索引擎抓取的角度浅析网站的收录规律。

从搜索引擎抓取的角度浅析网站的收录规律。

谈SEO一定要谈收录,不收录不SEO。网站收藏是SEO实践过程中比较重要的环节之一。这个领域的技术文章在网络上几乎是饱和的。通常,大多数人认为网页没有收录是因为质量差,缺乏创意,或者缺乏外部链接,这不能说是错的。这些只是站长们单方面思考的表面现象。下面从搜索引擎抓起分析网站收录的规律。 互联网上每...

正能量:正能量是什么意思啊

正向能量的英文名的意思是积极的能量、正向能量,它原本是一个物理学的概念,后来引申义为一切给予人向上和希望、促使人不断追求、让变得圆满幸福的动力和感情。这是一个在今年经常被引用的一个词。起初,在今年的奥运火炬传递期间,很多博主在微博上发表“点燃正能量,引爆小宇宙!”和“点燃...

今天,我们跟年轻人聊了聊财富这件事儿

今天,我们跟年轻人聊了聊财富这件事儿

作者:Andy,Alex,Jess 昨天是第六个中国日,我们选择将视线从过往对品牌行业的观察,转移到更为具象的人群理解。希望通过探究这一代年轻人群的财富人生,为当下蓬勃发展的财富管理行业品牌建设提供一些启示。 一、开篇2017年,一位85后...

《销售技巧》:没有好脾气干不了销售

《销售技巧》:没有好脾气干不了销售

每天一则销售学定律,每天提升销售技能,你就是下一个销售冠军。没有好脾气干不了销售一些有经验的老销售员经常说:“没有好脾气干不了销售。”这种说法不难理解。销售员每天要面对不同的顾客,可能会遇到各种情况:被人拒绝,被人指责,甚至被人奚落,如果没有一个好脾气,恐怕就很难适应销售工...

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

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