Swift枚举的一些小用法总结

前言

在 Swift 中,枚举是一个非常方便也非常强大的类型。我们在日常使用中也经常会使用到它。

例如,我们最常见的 optional:

enum Optional<T> {
 case Some(T)
 case None
}

这里不准备介绍枚举的基本用法,只是记录两个比较好用的枚举用法。

关联值

关联值是将额外信息附加到 enum case 中的一种极好的方式。

例如,当我们需要将一系列的值传到下一个类中时,一般情况下我们像下方代码一样写出几个设置的方法:

struct MyStruct {
  var value: Int

  init(_ value: Int?) {
    if let val = value {
      self.value = val
    } else {
      self.value = Int(INT_MAX)
    }
  }
}

class Two {
  var value1: String?
  var value2: Int?
  var value3: MyStruct?

  func setValue1(value: String?) { }
  func setValue2(value: Int?) { }
  func setValue2(value: MyStruct?) { }
}

这样当需要传的值变多时,代码无疑就会变得没那么好看了。我们可以用枚举来简化:

enum ValueBind {
  case bindStringValue(str: String)
  case bindIntValue(num: Int)
  case bindModel(model: MyStruct)
}

class Two {
  var value1: String?
  var value2: Int?
  var value3: MyStruct?

  func setValueBind(value: ValueBind) {
    switch value {
    case .bindStringValue(let str):
      print(str)
    case .bindModel(let model):
      print(model.value)
    case .bindIntValue(let num)
      print(num)
    }
  }
}

利用枚举关联值之后,咱们的代码马上就简洁了不少。

自定义枚举类型

平常我们使用枚举时,我们在为枚举定义 value 时,一般就只用了几种基本的类型:

enum Direction {
  case left
  case top
  case right
  case bottom
}

enum StringEnum: String {
  case hello = "hello"
  case world = "world"
}

enum IntEnum: Int {
  case one = 1
  case two = 2
}

但是,如果我们需要在枚举类型放入我们自定义的类型的话,我们就需要为枚举加一些东西了。

enum CustomEnum: RawRepresentable {
  typealias RawValue = MyStruct

  case null
  case one
  case two

  init?(rawValue: MyStruct) {
    switch rawValue.value {
    case 1:
      self = .one
    case 2:
      self = .two
    default:
      self = .null
    }
  }

  var rawValue: MyStruct {
    switch self {
    case .one:
      return MyStruct(1)
    case .two:
      return MyStruct(2)
    default:
      return MyStruct(nil)
    }
  }
}

我们让枚举遵守 RawRepresentable 协议,并实现协议的一些属性及方法:

/*
  将枚举的 RawValue 关联为自己希望的类型
**/
associatedtype RawValue

/*
  利用自己关联的类型生成枚举的实例
**/
init?(rawValue: Self.RawValue)

/*
  将自己定义的类型的作为 RawValue 返回
**/
var rawValue: Self.RawValue { get }

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对我们的支持。

(0)

相关推荐

  • Swift教程之枚举类型详解

    枚举定义了一个常用的具有相关性的一组数据,并在你的代码中以一个安全的方式使用它们. 如果你熟悉C语言,你就会知道,C语言中的枚举指定相关名称为一组整数值.在Swift中枚举更为灵活,不必为枚举的每个成员提供一个值.如果一个值(被称为"原始"的值)被提供给每个枚举成员,则该值可以是一个字符串,一个字符,或者任何整数或浮点类型的值. 另外,枚举成员可以指定任何类型,每个成员都可以存储的不同的相关值,就像其他语言中使用集合或变体.你还可以定义一组通用的相关成员为一个枚举,每一种都有不同的一组

  • 深入解析Swift编程中枚举类型的相关使用

    枚举是由用户定义的数据类型的一组相关值.关键字 enum 用来定义枚举数据类型. 枚举功能 枚举在 swift 也类似于 C 和 Objective C 中结构类型 它是在一个类中声明,其值是通过该类的实例来访问 初始成员值是用枚举初始化定义的 其功能也扩展确保标准的协议功能 语法 枚举引入 enum 关键字和一对大括号内将它们定义: 复制代码 代码如下: enum enumname {    // enumeration values are described here } 例如,可以为星期

  • Swift 3.0基础学习之枚举类型

    枚举语法 使用关键字 enum 定义一个枚举 enum SomeEnumeration { // enumeration definition goes here } 例如,指南针有四个方向: enum CompassPoint { case north case south case east case west } 这里跟 c 和 objective-c 不一样的是,Swift 的枚举成员在创建的时候没有给予默认的整型值.所以上面代码中的东南西北并不是0到3,相反,不同的枚举类型本身就是完全

  • Swift编程之枚举类型详解

    想必写过程序的童鞋对枚举类型并不陌生吧,使用枚举类型的好处是多多的,在这儿就不做过多的赘述了.Fundation框架和UIKit中的枚举更是数不胜数,枚举可以使你的代码更易阅读并且可以提高可维护性.在Swift语言中的枚举可谓是让人眼前一亮.在Swift中的枚举不仅保留了大部分编程语言中枚举的特性,同时还添加了一些好用而且实用的新特性,在本篇文章中将领略一些Swift中枚举类型的魅力. 有小伙伴会问,不就是枚举么,有什么好说的.在Swift中的枚举怎不然,Swift中的枚举的功能要强大的多,不仅

  • 详解Swift中enum枚举类型的用法

    一.引言 在Objective-C语言中,没有实际上是整型数据,Swift中的枚举则更加灵活,开发者可以不为其分配值类型把枚举作为独立的类型来使用,也可以为其分配值,可以是字符,字符串,整型或者浮点型数据. 二.枚举语法 Swift中enum关键字来进行枚举的创建,使用case来创建每一个枚举值,示例如下: //创建姓氏枚举,和Objective-C不同,Swift枚举不会默认分配值 enum Surname { case 张 case 王 case 李 case 赵 } //创建一个枚举类型的

  • Swift枚举的一些小用法总结

    前言 在 Swift 中,枚举是一个非常方便也非常强大的类型.我们在日常使用中也经常会使用到它. 例如,我们最常见的 optional: enum Optional<T> { case Some(T) case None } 这里不准备介绍枚举的基本用法,只是记录两个比较好用的枚举用法. 关联值 关联值是将额外信息附加到 enum case 中的一种极好的方式. 例如,当我们需要将一系列的值传到下一个类中时,一般情况下我们像下方代码一样写出几个设置的方法: struct MyStruct {

  • 深入探究Swift枚举关联值的内存

    enum Season { case Spring, Summer, Autumn, Winter } let s = Season.Spring 这是枚举最基础的用法,但是在swift中,对枚举的功能进行了加强,也就是关联值. 关联值可以将额外信息附加到 enum case中,像下面这样子. enum Test { case test1(v1: Int, v2: Int, v3: Int) case test2(v1: Int, v2: Int) case test3(v1: Int) cas

  • c语言枚举类型enum的用法及应用实例

    目录 前言 一.枚举的概念 二.枚举的几种用法 1.直接定义枚举值,然后给普通变量赋值. 2.定义带名称的枚举 三.定义枚举别名 四.枚举有什么用,用在哪里? 最后总结: 前言 今天跟大家讲一下我在产品开发时,用枚举(enum)的一些骚操作. 我跟你保证,今天的内容绝对是你在书本和视频学不到的. 为什么要讲枚举呢? 因为我发现它是一个容易被遗忘,同时又非常重要的关键词,大家如果看那些大佬写的程序,真的会发现有非常非常多enum的应用. 让我惊奇的是市面上的一些C语言书籍以及视频课程并没有重视去讲

  • 详解Swift中的下标访问用法

    Swift中的Array,Dictionary类型可以通过下标或者键值的方式来进行数据的访问,实际上在Swift的语法中,下标可以定义在类.结构体.枚举中.开发者可以通过下标的方式来对属性进行访问而不用使用专门的存取方法.并且定义的下标不限于一维,开发者可以定义多维的下标来满足需求. 下标的语法结构 下标使用subscript来定义,其有些类似于方法,参数和返回值本别作为下标入参和通过下标所取的值.但是在subscript实现部分,又十分类似于计算属性,其需要实现一个get块和可选实现一个set

  • java 枚举类中的valueOf用法说明

    目录 枚举类中的valueOf用法 先创建一个BasicEnum的接口 创建一个枚举类实现BasicEnum接口 枚举类valueOf方法的疑问 枚举类中的valueOf用法 前言:今天遇到了一个枚举类的valueOf用法,遇到了一点问题,这里特例写一个demo来测试一下 先创建一个BasicEnum的接口 /** * @Author 徐志 * @date 2020/9/4 12:42 **/ public interface BasicEnum<L,V> { /** * get name *

  • 窥探Swift编程中的错误处理与异常抛出

    在Swift 2.0版本中,Swift语言对其错误处理进行了新的设计,当然了,重新设计后的结果使得该错误处理系统用起来更爽.今天的主题就是系统的搞一下Swift中的错误处理,以及看一下Swift中是如何抛出异常的.在编译型语言中,错误一般分为编译错误和运行时错误.我们平时在代码中处理的错误为运行时错误,我们对异常进行处理的操作的目的是为了防止程序出现错误而导致其他的副作用,比如用户数据未保存等等. 在今天的文章中,先给出主动产生异常的几种情况,然后再给出如何处理被动异常. 一.主动退出程序的几种

  • 深入解析Swift代理模式

    配置如下: Xcode 8.2 Swift 3.0 在iOS开发中,无论是 Objective-C 还是 Swift ,Delegate 有着具足轻重的位置,如TabelViewDelegate 与 TableViewDataSource. Swift 中的代理模式 和 Objective-C 除了语法外,几乎一样. Objective-C 代理模式 在介绍 Swift 代理模式前,先来看回顾一下 Objective-C 中的代理模式如何实现 Objective-C 中用代理实现反向传值: 委托

  • 浅谈Python 的枚举 Enum

    枚举是常用的功能,看看Python的枚举. from enum import Enum Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec')) 枚举的定义 首先,定义枚举要导入enum模块. 枚举定义用class关键字,继承Enum类. 注意: 定义枚举时,成员名称不允许重复 默认情况下,不同的成员值允许相同.但是两个相同值的成员,第二个

随机推荐