Swift4.0复习枚举
1.枚举类型:
“Swift编程语言中,枚举类型属于值类型,而不是引用类型。”
摘录来自: “大话Swift 4.0”。 iBooks.
2.枚举类型和枚举对象的定义:
- enum Enumeration {
- case value1
- case value2
- case value3; case value4, value5
- case value6
- }
3.指定基本类型和原生值:
- /// 将IntEnum指定为Int类型
- enum IntEnum: Int {
- case zero
- case one = , two, three
- case six = , seven, eight
- }
- print("one = \(IntEnum.one.rawValue)")
- var one = IntEnum(rawValue: 0)
if let o = one {
printf("one is: \(o)")
printf("one value is: \(o.rawValue)")
}
4.枚举关联值:
- /// 这里定义了一个枚举MyTestEnum,
- /// 它枚举case中含有关联值
- enum MyTestEnum {
- /// 这里的value1具有一个Void类型的关联值
- case value1(Void)
- /// 这里的value2具有一个Int类型的关联值
- case value2(Int)
- /// 这里的value3具有Float、Int、Void与String
- /// 这四个类型的关联值
- case value3(Float, Int, Void, String)
- }
/// 这里用的关联值为10
let e2 = MyTestEnum.value2(10)
5.递归枚举:
“如果一个枚举类型中某一枚举case的其中一个关联值的类型为该枚举类型本身,那么我们称之为递归枚举”
摘录来自: “大话Swift 4.0”。 iBooks.
- enum MyEnum {
- /// 这里value1不指示对它插入间接层,
- /// 因为其关联值不是该枚举类型本身
- case value1(Int)
- /// 对value2插入间接层,
- /// 因为其关联值为该枚举类型本身
- indirect case value2(MyEnum)
- }
- /// 这里在IndrectEnum枚举前直接添加indirect关键字,
- /// 使得这里面所有的枚举case都插入了间接层。
- /// 此时该枚举中的所有枚举case前都不能再放indirect关键字了
- indirect enum IndrectEnum {
- case value1(Int)
- case value2(MyEnum)
- }
6.枚举中的属性和方法:
- /// 这里定义了一个FoodAndDrink枚举
- enum MyEnum {
- case one(Int)
- case two(Int)
- case three(Int)
- /// 在枚举中可以定义初始化器
- init() {
- // 这里默认将当前枚举对象的值作为one枚举值,
- // 其关联值为0
- self = .one()
- }
- /// 这里定义了一个实例方法fetchValue,
- /// 用于萃取当前枚举值的关联值
- func fetchValue() -> (Int, String) {
- switch self {
- case let .one(value):
- return (value, "one")
- case .two(let value):
- return (value, "two")
- case .three(let value):
- return (value, "three")
- }
- }
- /// 这里定义了一个类型方法,
- /// 根据输入参数的值来返回相应的枚举值
- static func makeEnum(with value: Int) -> MyEnum {
- switch value {
- case ..< :
- return .one(value)
- case ..< :
- return .two(value)
- default:
- return .three(value)
- }
- }
- /// 这里定义了一个计算式实例属性,
- /// 将当前枚举值设置为two枚举值,
- /// 并带有指定的关联值
- var computedProperty: Int {
- set(i) {
- self = .two(i)
- }
- get {
- return self.fetchValue().
- }
- }
- /// 这里定义了一个存储式类型属性
- static var storedTypeProperty: Int =
- /// 这里定义了一个计算式类型属性
- static var comutedTypeProperty: Int {
- set(i) {
- storedTypeProperty = i
- }
- get {
- return storedTypeProperty
- }
- }
- }
- func process[…]
Swift4.0复习枚举的更多相关文章
- Swift4.0复习特性、编译标志和检查API的可用性
1.Swift中的特性: @引出,后面紧跟特性名,圆括号带参数即可. @attribute(args) avaiable: 指明对象,函数,类型的可用性. @available(iOS 10.0, m ...
- Swift4.0复习访问控制与作用域
1.访问等级: open: 可以继承,可以重写. public: “public 访问等级能用于修饰所有文件作用域的函数.对象.协议.枚举.结构体.类以及各种类型中的属性与方法.用 public 所修 ...
- Swift4.0复习错误处理
1.Swift中错误的表示: “在Swift中如果我们要定义一个表示错误的类型非常简单,只需遵循 Error 协议即可.我们通常用枚举或结构体类型来表示错误类型,当然枚举可能用得更多些,因为它能更直观 ...
- Swift4.0复习扩展
1.扩展计算式属性: 2.对方法进行扩展: /// 定义枚举类型Light, /// 它指定了基本类型String enum Light: String { case red = "red& ...
- Swift4.0复习类
1.类的属性: 2.类的方法: 3.类作为引用类型: “Swift新增了一对操作符 === 与 !== 用于判定同一个类的两个对象引用是否指向同一对象实例.” 摘录来自: “大话Swift 4.0”. ...
- Swift4.0复习协议
1.协议的定义: /// 定义一个协议MyProt protocol MyProt { /// 声明了一个实例方法foo, /// 其类型为:() -> Void func foo() ...
- Swift4.0复习结构体
1.基本语法: /** 定义了一个结构体 */ struct Structure { /// 一个常量存储式实例属性, /// 并直接为它初始化 let constProperty = /// ...
- Swift4.0复习基本语法简介
1.五种类型: 包含五种类型——枚举(enum).结构体(struct).类(class).协议( protocol)以及函数类型(function types). 2.变量对象:var 3.常量对象 ...
- Swift4.0复习类型定义、类型投射等操作
1.类型定义: /// 这里将MyInt定义为Int32类型 typealias MyInt = Int32 /// 这里将MyArrayInt定义为[MyInt]数组类型 typealias M ...
随机推荐
- Linux 之 光标消失隐藏术
下面是 Linux 光标突然不见的解决办法: 直接敲命令行就行 echo -e "\033[?25l" 隐藏光标 echo -e "\033[?25h" 显示 ...
- python 类 双下划线解析
__getattr__用法:说明:这是python里的一个内建函数,当调用的属性或者方法不存在时,该方法会被调用调用不存在的属性调用不存在的方法
- LeetCode 364. Nested List Weight Sum II
原题链接在这里:https://leetcode.com/problems/nested-list-weight-sum-ii/description/ 题目: Given a nested list ...
- Tensorflow细节-P196-输入数据处理框架
要点 1.filename_queue = tf.train.string_input_producer(files, shuffle=False)表示创建一个队列来维护列表 2.min_after_ ...
- luoguP3768简单的数学题
大佬们绕道吧(或跳到错误&启发后下一根横线后) 这道题吧正解是莫比乌斯反演吧,但本人有一种独创玄妙的想法去偏分 这道题是让我们求这个对吧 \((\sum_{i=1}^n\sum_{j=1}^n ...
- 数据库应用之--Redis+mysql实现大量数据的读写,以及高并发
一.开发背景 在项目开发过程中中遇到了以下三个需求: 1. 多个用户同时上传数据: 2. 数据库需要支持同时读写: 3. 1分钟内存储上万条数据: 根据对Mysql的测试情况,遇到以下问题: 1. 最 ...
- vue-cli3配置多页面入口
假如要单独将登陆页面当成一个项目入口文件: 第一步:创建一个登陆页面的文件 在项目public文件夹下创建一个login.html,其实就是将index.html复制一份,将title改一下: 第二步 ...
- Android Studio导入google training example gradle失败
Error:Unable to tunnel through proxy. Proxy returns "HTTP/1.1 400 Bad Request 每次从github的Google ...
- SpringCloud:Zipkin链路追踪,并将数据写入mysql
1.zipkin server 1.1.新建Springboot项目,zinkin 1.2.添加依赖 <dependency> <groupId>io.zipkin.java& ...
- ubuntu之路——day8.4 Adam自适应矩估计算法
基本上讲,Adam就是将day8.2提到的momentum动量梯度下降法和day8.3提到的RMSprop算法相结合的优化算法 首先初始化 SdW = 0 Sdb = 0 VdW = 0 Vdb = ...