我不是罗大锤我不是罗大锤

我不是罗大锤

我不是罗大锤我不是罗大锤

我不是罗大锤

首页首页
分类分类
标签标签
友情链接友情
日记日记
开发中
博客仍在开发中。
Powered byNola
Swift Enum 简单用法Swift Enum 简单用法

Swift Enum 简单用法

&Swift#Swift

允许评论

20 天前

一、建立枚举

// 以下两种写法是等价的
enum Country {
  case China, America, Russia
}

enum Country {
  case China
  case America
  case Russia
}

二、Associated Value

定义

enum Test {
  case A(a: String)
  case B(b: Data)
  case C(c: Int)
}

存取

let method = Test.A(a: "This is a")

// 第一种存取方式
switch method {
  case .A(let a):		// 或者 case .A(a: let a):
  	print("Desc: \(a)")
}

// 第二种存取方式
if case Test.A(let a) = method {
  print(a)
}

三、Hashable

如果枚举没有 associated value 的话,默认就是 Hashable 的。

如果枚举有 associated value,必须显示声明 Hashable,如果枚举中的每一个值都是 Hashable,那么就会自动提供 hash 方法。

四、RawValue

Swift 的枚举提供快速串接使用 String、Int、Float、Double 作为 RawValue 的方法(前提是没有设置 associated value)。数字类型会自动按照 case 顺序从 0 开始递增。

只需要在第一个位置声明具体的类型即可。

enum Test: String {
  case A
  case B = "我是 B"
  case C
}

let a = Test.A
let b = Test.B

print(a.rawValue)		// print: A
print(b.rawValue)		// print: 我是 B

五、列举所有 Case

实现 CaseIterable 协议,就可以通过 allCases 来获取所有 case 的一个列表。

1. 通过迭代打印

enum Test: String, CaseIterable {
  case A
  case B = "我是 B"
  case C
}

for test in Test.allCases {
    print(test)
}
// print: A
// print: B
// print: C

2. 直接打印列表

直接打印的话是打印的默认自动生成的描述,如果想要打印 RawValue,可以实现 CustomStringConvertible 并实现 description 即可。如下所示:

// MARK: - 直接打印默认描述
enum Test: String, CaseIterable {
  case A
  case B = "我是 B"
  case C
}

// print: [Algorithm.Test.A, Algorithm.Test.B, Algorithm.Test.C]
print(Test.allCases)



// MARK: - 打印 RawValue
enum Test: String, CaseIterable, CustomStringConvertible {
    // 实现 description
    var description: String {
        rawValue
    }
    
    case A
    case B = "我是 B"
    case C
}

// print: [A, 我是 B, C]
print(Test.allCases)

六、将文本转 Case

可以通过 init 实例化枚举的时候传入文本来尝试将文本转为 case。

let test = Test.init(rawValue: "A")
// print: Optional(A)
print(test)
目录
一、建立枚举
二、Associated Value
三、Hashable
四、RawValue
五、列举所有 Case
1. 通过迭代打印
2. 直接打印列表
六、将文本转 Case
暂无评论