首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Swift基础 枚举

Swift基础 - 枚举 翻译自:https://docs.swift.org/swift-book/LanguageGuide/Enumerations.html 枚举为一组相关值定义了通用类型,并使您能够在代码中以类型安全的方式处理这些值...如果您熟悉C,您将知道C枚举为一组整数值分配相关名称。Swift 中的枚举要灵活得多,不必为每个枚举案例提供值。...Swift 中的枚举本身就是一流的类型。它们采用了许多传统上仅由类支持的功能,例如计算属性以提供有关枚举当前值的更多信息,以及实例方法,以提供与枚举所代表的值相关的功能。...有关协议的信息,请参阅协议。 关联值 上一节中的示例显示了枚举的情况本身是如何定义(和键入)的值。您可以为Planet.earth设置常量或变量,稍后检查此值。...Barcode类型的常量和变量可以存储.upc或.qrCode(及其相关值),但它们在任何给定时间只能存储其中之一。 您可以使用开关语句检查不同的条形码类型,类似于将枚举值与交换机语句匹配中的示例。

10300

Swift系列四 - 枚举

:public typealias Void = () 二、枚举 Swift枚举和C/OC语言不一样,以前写OC的时候枚举本质是int类型,但Swift中枚举可以是多类型的。...在Swift中查看内存占用大小及对齐方式使用枚举:MemoryLayout: size:实际用到的空间大小 stride:分配占用的空间大小 alignment:内存对齐方式 下面的意思是,Int在内存中占用...的倍数,所以往高位补齐后就是40了 为什么other占用1个字节呢?...结论一: 把传进去的关联值直接存储到枚举变量内存里面的,所以枚举变量是关联值的话,内存是一定和将要存储的关联值大小有关。...,内存中只会把对应的成员值(序号)存下来,这时候1个字节足够用了,和枚举类型无关(不管是Int还是String枚举都是占用一个字节)。

52710
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Swift讲解专题九——枚举 原

    Swift讲解专题九——枚举 一、引言         在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值...二、枚举语法         Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum...        Swift中的枚举有一个很有意思的特点,其可以设置一些相关值,通过相关值,开发者可以从公用的枚举值中获取到传递的额外相关值,示例如下: enum Number { case one...有了相关值这样的句法,大大的增加了枚举的灵活性,例如一个形状枚举,可能的枚举值有矩形,圆形等,矩形的枚举值就可以提供宽高的相关值,圆形的枚举值就可以提供半径的相关值,是开发更加灵活。...表示加 case add //表示减 case mul } 前面有提到过相关值的概念,因此,对于上述例子,可以为add和mul枚举值添加两个相关值作为参数。

    44620

    @AppStorage研究

    因此,可能发生数据不能完全同步的情况,严重时有数据彻底丢失的可能。...在安全和便捷的声明(二)中我们将尝试使用另一种解决途径。 集中注入 在介绍另一种便捷声明方式之前,我们先聊一下集中注入的问题。...在安全和便捷的声明(一)中使用的方法对于单独注入的情况是满足的,但如果我们想统一注入的话就需要其他的手段了。...$name) 不仅代码整洁了许多,而且由于只需要在Defaults中声明一次,极大的降低了由于字符串拼写错误而出现的不易排查的Bug。...安全和便捷的声明(二) 集中注入中提供的方法已经基本解决了我在当前使用@AppStorage中碰到的不便,不过我们还可以尝试另一种优雅、有趣的逐条声明注入的方式。

    1.5K20

    窥探Swift之别样的枚举类型

    想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了。...Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性。在Swift语言中的枚举可谓是让人眼前一亮。...一、定义枚举     在Swift中枚举的定义与其他编程语言中定义枚举不同,在每个枚举元素前面多了一个关键字case,  case后紧跟的是枚举元素,下面是定义枚举类型的两种方式。     1....    在Swift中声明枚举时,是可以给每个枚举成员赋一个值的,下面的City枚举的成员就被指定了一个值,如下所示: //给枚举赋值 enum City: String{ case Beijing...第一个赋值后,后边的会自增的。

    1K70

    SwiftUI:“看我展示52张扑克牌,很快啊!”

    思路 使用 SwiftUI 创建 UI 结构; 使用 swift 的枚举和结构体实现数据生成,通过 viewModel 整合数据用于展示(交互暂时未做,因此不涉及 MVVM 设计模式中的数据绑定)。...枚举创建扑克牌号码 //CaseIterable:当需要对枚举进行遍历时,需要遵守 CaseIterable 协议,然后对枚举的 allCases 类属性进行遍历即可 enum Rank:Int, CaseIterable...{ case ace = 1 //未指定确定值的类别,默认值是“依次”加1,因此,two 的 rawValue 为2,three 的 rawValue 为 3,以此类推...} }.padding() } } 源码 FullDeckOfCards_SwiftUI 感受 swift 语法在构建数据类型时比 OC 方便太多了,枚举和结构体...距离 APP 支持最低版本 iOS13 应该也不远了(微信目前最低支持 iOS11.0),iOSer 们,是时候学习一波 SwiftUI 了!随便再温习下 swift 相关语法。

    99950

    Swift基础 嵌套类型

    同样,可以方便地定义纯属实用程序类和结构,以便在更复杂类型的上下文中使用。为了做到这一点,Swift使您能够定义嵌套类型,从而在它们支持的类型的定义中嵌套支持枚举、类和结构。...嵌套类型在行动 下面的示例定义了一个名为BlackjackCard结构,该结构模拟了二十一点游戏中使用的扑克牌。BlackjackCard结构包含两种嵌套枚举类型,称为Suit和Rank。...Rank枚举描述了13个可能的扑克牌排名,以及表示其面值的原始Int值。(此原始Int值不用于Jack、Queen、King和Ace卡。)...它还定义了一个名为description计算属性,该属性使用rank和suit中存储的值来构建卡片名称和值的描述。...嵌套在BlackjackCard中,它们的类型可以从上下文中推断出来,因此此实例的初始化只能通过它们的大小写名称(.ace和.spades)来引用枚举案例。

    10400

    开关组件对比

    这种情况下,做法是启动的时候调用服务端的接口,在返回的接口数据中存储对应的值,使用时直接获取存储的值。...}) // 使用时 // 获取存储的值,用于判断 对比 而在09|开关组件:如何使用功能开关,支持产品快速迭代中,作者把开关组件分为了三类:编译时开关、本地开关和远程开关 编译时开关:让编译器通过检查编译条件来启动后者关闭一些功能...通过Swift protocol定义了ToggleType和TogglesDataStoreType两个协议,并定义两个方法,判断开关是否打开、以及更新开关状态 // TogglesDataStoreType.swift...) } } 远程开关的实现: 定义一个枚举,RemoteToggle继承自String和ToggleType,定义String也是为了使用key,每增加一种类型,只需要在enum添加case。...而抽象统一处理后,只需要知道对应的协议是什么,按照协议搜索有哪些实现,即可,方便快捷。

    95811

    Swift 面向对象解析(一)

    在Swift中,枚举和结构体是值类型的,类是引用类型。值类型和引用类型的区别,我们后面说,先知道这一点。        ...,其实按照我们最开始学的时候的方式去定义没问题,只是在官方的定义中,OC和Swift都是上面例子的方式写枚举,这样写也有好处,有同行分析过了,链接这里。...Swift 中的枚举,你应该了解的东西 Swift 中枚举高级用法及实践  二:类和结构体           把这两个放在一起,纯粹是因为这两个太像了,我们先把区别罗列出来,剩下的两者都一样。          ...但在Swift 中,以前记得看书的时候说是有 类 的实例才能叫做 对象,而 结构体 和 枚举 的实例只能叫做实例,不能叫做对象。...其实你掌握了可选类型的使用,可选链就没什么难度了,下面具体用法下面链接讲的很清楚: Swift 可选链  八:构造器 构造器用于完成实例的构造过程,这个过程包括为实例中的每个存储属性社会中初始值和执行必要的准备和初始化任务

    1.8K70

    Swift3.0 - 属性

    存储属性 a.你应该注意的 1.类和结构体中,不能在枚举中使用 2.不能被子类重写,但可以在子类中给它添加监测功能 b.定义 struct Range { // 结构体定义存储属性...{ // 有setter 和 getter的计算属性 set{ first = newValue } get{ return first...,willSet 监测新值,didSet 监测旧值 2.如果函数的参数是inout 修饰的,你如果将监测的属性传入这个函数的时候,此时会将属性的值拷贝一份,在函数结束的时候,将值重新付给属性,所以函数执行完毕后...return score } } class Man: Person { // 重写计算属性 可以使用static 来重写哦,但是static 重写后,就不能被它的子类再次重写了 class...,我们做一个练习 需求: 有个自定义类,类中有一个数组,数组中包含20位斐波那契数列 class Calculate{ var fibo:[Int] = { // 定义一个数组

    46530

    深入源码彻底搞清vue3中reactive和ref的区别

    ---- 一、前言 在vue3的日常开发中,我发现很多人都是基于自己的习惯reactive或ref一把梭,虽然这样都可以实现需求,既然这样那为什么已经有了reactive还需要再去设计一个ref呢?...抱着这样的疑问我们本次就深入源码,彻底搞清vue3中reactive和ref的区别 不想看源码的童鞋,可以直接拉到后面看总结 reactive 源码地址:packages/reactivity/reactive.ts..., key: string | symbol, receiver: object) { // ReactiveFlags 是在reactive中声明的枚举值,如果key是枚举值则直接返回对应的布尔值...和set拦截进行依赖收集和派发更新的 toReactive 我们来看一下toReactive()这个方法,在RefImpl中创建ref数据时会调用toReactive()方法,这里会先判断传进来的值是不是对象...答:这是因为要解决响应式丢失的问题,举个例子: // obj是响应式数据 const obj = reactive({ foo: 1, bar: 2 }) // newObj 对象下具有与 obj对象同名的属性

    1.3K20

    IOS-swift5.1快速入门之旅

    有一种更简单的方法可以在字符串中包含值:在括号中写入值,并在括号\前写入反斜杠()。...了其上限值的范围内,并用...做既包括值的范围。 功能和闭包 使用func声明函数。通过在括号中使用参数列表跟随其名称来调用函数。使用->的参数名称和类型从函数的返回类型分开。...在上面的示例中,Ace显式给出了原始值1,其余的原始值按顺序分配。您还可以使用字符串或浮点数作为枚举的原始类型。使用该rawValue属性可以访问枚举案例的原始值。 使用init?...(rawValue:)初始化程序从原始值创建枚举的实例。它返回与原始值匹配的枚举大小写,或者nil如果没有匹配则返回Rank。...枚举情况的另一个选择是使值与案例相关联 - 这些值在您创建实例时确定,并且对于枚举案例的每个实例它们可以不同。您可以将关联值视为与枚举案例实例的存储属性相似。

    2.1K20

    【学习笔记】SWIFT中的构造函数

    一、前言 2017 年才接触苹果相关的东西,打算学习 Apple iOS 开发,无 Objective-C 基础,目前正在努力学习 SWIFT 的过程中。...二、语言 SWIFT 构造函数基本要点 SWIFT 的构造函数用于结构体、枚举和类中:struct, enum, class ,作为实例的初始化,它的基本语法是 init 函数: class MyClass...rawValue 参数的构造函数,仅此一个,注意:这个构造函数还是个可失败构造函数,学过 Java 的朋友都知道,构造函数可以抛出异常,在 Swift 中可以直接让实例化失败返回 nil ,那就是:...Override 和 Required 关键字 SWIFT 中类的构造函数在子类中同样定义的话,必须需要 override 关键字: class ParentClass { init() {...另外要指出的是,可以直接定义便利构造器,你只需要访问默认的指定构造器就可以了,注意注释部分重复定义的错误提示哦: ?

    1.2K20

    15.Swift学习之枚举

    枚举介绍 概念介绍 枚举定义了一个通用类型的一组相关的值,可以在代码中以一个安全的方式来使用这些值 Swift中的枚举是一等类型, 它可以像类和结构体一样增加属性和方法 在 C/OC 语言中枚举指定相关名称为一组整型值...,而Swift 中的枚举更加灵活,不必给每一个枚举成员提供一个值,Swift 中的枚举可以提供的值类型有:字符串,字符,整型值,浮点值等 Swift 中的枚举可以包含方法 枚举类型的语法 使用enum...定义方式一 case关键词表明新的一行成员值将被定义 不像 C 和 Objective-C 一样,Swift 的枚举成员在被创建时不会被赋予一个默认的整数值 下面的例子中,North,South,...East和West不是隐式的等于0,1,2和3 enum CompassPoint { case North case South case East case West } 定义方式二...C/OC中枚举的本质就是整数,所以C/OC中的枚举是有原始值的,默认是从0开始,而Swift中的枚举默认是没有原始值的, 但是可以在定义时告诉系统让枚举有原始值 注意: 原始值区分大小写 返回的是一个可选值

    55830

    干货 | KotlinNative 异步并发模型初探

    Kotlin/Native 用于实现异步和并发的方案主要有三种。 1)基于宿主环境(操作系统)实现。例如与使用 POSIX C 编写原生程序一样。...为了验证代码中的几个关键位置到底是在哪个线程中执行的,我们使用 posix 标准中的 pthread_self()函数打印线程 id,这段代码执行后的输出如下: Position 1, thread id...仔细分析一下这段代码,在主线程中 testData对象初始化之后,紧接着会执行 producer 内的代码,当 producer 执行完毕后,异步的 job内的代码就会开始执行,但是主线程依然可以引用到...现在我们回过头来看看 execute 的第一个参数,它代表对象转移校验模式,是一个枚举类型,共有 SAFE 与 UNSAFE两个值可选,在上面的示例中,我们都使用的是 SAFE 模式,现在我们把它更换为...在这里 main 函数体与经 Dispatchers.Main调度后的协程都运行在主线程内。

    1.8K20

    Swift基础语法简化版(续)

    关于设置Swift中枚举的原始值,需要注意以下几点: 如果原始值是String类型,则原始值是区分大小写的 通过 rawValue 可以获取原始值 通过 rawValue 返回的枚举是一个可选型,因为原始值对应的枚举值不一定存在...) // 3 这个例子中,枚举的原始值设置的是Int类型,并且设置了第一个枚举值的原始值是1,所以North的原始值就是3。...//这里获取的枚举值是一个可选型,因为原始值对应的枚举值不一定存在let b = CompassPoint(rawValue: 4)let c = CompassPoint(rawValue: 5) 结构体...func play() { print("play") } } 该例中定义了一个名为Person的类,该类有两个属性和一个方法。...类的属性介绍 在Swift的类中,属性分为如下三种: 存储属性:用于存储类的实例的常量和变量 计算属性:通过某种方式计算出来的属性 类属性:与整个类自身相关的属性 一、存储属性 存储属性是最简单的属性

    1.6K20
    领券