Swift 枚举关联值
来源:互联网 发布:php mvc项目 编辑:程序博客网 时间:2024/05/29 07:25
枚举关联值介绍
Swift 的枚举中可以把其他类型的关联值和成员值一起存储起来使用,这样使你连同成员值一起存储额外的自定义信息,并且你每次在代码中使用该枚举成员时,还可以修改这个关联值。
你可以定义 Swift 枚举来存储任意类型的关联值,如果需要的话,每个枚举成员的关联值类型可以各不相同。
比如一个比较大小的结果的枚举:
enum ResultCode { case bigger(String?) case smaller(String?) case equal(Int?)}
以上代码可以理解为一个 ResultCode 的枚举类型,它的两个成员值是具有 (String?) 类型关联值的 bigger,small 。另外一个成员是具有 Int 类型关联值的 equal
然后我们可以创建一个新的 ResultCode 实例,例如:
var result1 = ResultCode.bigger("bigger")
上面例子创建了一个名为 result1 的变量,并将 ResultCode.bigger 赋值给它,关联的值为 “bigger”
result1 = .smaller("smaller")
代码中,原始的 ResultCode.bigger 和其整数关联值被新的 ResultCode.smaller 和其字符串关联值所替代。 ResultCode类型的常量和变量可以存储一个 .bigger 或者一个 .smaller , 但是在同一时间只能存储这两个值其中的一个。
像一般的枚举一样,可以使用一个 switch 语句来检查不同的条形码类型。 然而,这一次,关联值可以被提取出来作为 switch 语句的一部分。你可以在 switch 的 case 分支代码中提取每个关联值作为一个常量或者变量来使用
switch result { case .bigger(let str1): print(str1 ?? "大于") case .small(let str2): print(str2 ?? "小于") case .equal(let str3): print(str3 ?? "等于") }
如果一个枚举成员的所有关联值都被提取为常量,或者都被提取为变量,为了简洁,你可以只在成员名称前标注一个 let 或者 var:
switch result { case let .bigger(str): print(str ?? "大于") case let .smaller(str): print(str ?? "小于") case let .equal(str): print(str ?? "等于")}
关于枚举关联值的两个使用例子:
- 定义一个比较大小返回结果的函数
func comparaNums(_ num1: Int, _ num2:Int ,completedHandler:(ResultCode) -> ()) { if num1 > num2 { completedHandler(.bigger(">")) }else if num1 < num2{ completedHandler(.smaller("<")) }else{ completedHandler(.equal(num1)) } }
调用此比较方法
override func viewDidLoad() { super.viewDidLoad() comparaNums(3, 3) { (result) in switch result { case .bigger(let str1): print(str1 ?? "大于") case .smaller(let str2): print(str2 ?? "小于") case .equal(let str3): print(str3 ?? "等于") } } }
- 自己封装网络请求时,也可以这么写
网络请求返回结果
enum ResponseResult { case json([String:AnyObject]?) case error(Error?) }
封装网络请求示例:
func getData(_ urlStr:String, completedHandler:@escaping(ResponseResult)->()) { Alamofire.request(urlStr).responseJSON { (response) in if let json = response.result.value as? [String:AnyObject] { completedHandler(.json(json)) }else{ if let error = response.error { completedHandler(.error(error)) } } } }
调用示例:
override func viewDidLoad() { super.viewDidLoad() getData("testurl") { (result) in switch result { case .json(let result): //do something print(result ?? "json") case .error(let error): //do something print(error ?? "error") } } }
阅读全文
0 0
- Swift 枚举关联值
- 7.5 Swift枚举关联值
- Swift-枚举关联值以及提取
- Swift基础语法-枚举,枚举原始值,枚举相关值,switch提取枚举关联值
- 7.6 Swift中switch提取枚举关联值
- Swift基础语法: 24 - Swift的枚举语法, 匹配枚举值和 Switch 语句, 关联值, 原始值
- Swift 关联值
- Swift 枚举
- Swift枚举
- [Swift]枚举
- Swift-枚举
- Swift 枚举
- Swift 枚举
- swift--枚举
- swift枚举
- swift 枚举
- swift枚举
- swift 枚举
- MFC中的DC,CDC和HDC
- HDU 3001 Travelling
- EOJ----连续正整数之和
- 技术实操|Apache Spark 内存管理详解(上篇)
- java 堆 栈 方法区的简单分析
- Swift 枚举关联值
- IBM x3650 M4服务器,电源断电后,来电自动开机
- Hadoop基础教程-第5章 YARN:资源调度平台(5.4 YARN集群运行)(草稿)
- 重要开发网站-持续更新
- M_CYOUSA
- 内存管理
- where条件语句
- 1120. Friend Numbers (20)[字符串处理]
- Linux中用户名和用户组的管理