Swift枚举的一些小用法总结
前言
在Swift中,枚举是一个非常方便也非常强大的类型。我们在日常使用中也经常会使用到它。
例如,我们最常见的optional:
enumOptional{ caseSome(T) caseNone }
这里不准备介绍枚举的基本用法,只是记录两个比较好用的枚举用法。
关联值
关联值是将额外信息附加到enumcase中的一种极好的方式。
例如,当我们需要将一系列的值传到下一个类中时,一般情况下我们像下方代码一样写出几个设置的方法:
structMyStruct{ varvalue:Int init(_value:Int?){ ifletval=value{ self.value=val }else{ self.value=Int(INT_MAX) } } } classTwo{ varvalue1:String? varvalue2:Int? varvalue3:MyStruct? funcsetValue1(value:String?){} funcsetValue2(value:Int?){} funcsetValue2(value:MyStruct?){} }
这样当需要传的值变多时,代码无疑就会变得没那么好看了。我们可以用枚举来简化:
enumValueBind{ casebindStringValue(str:String) casebindIntValue(num:Int) casebindModel(model:MyStruct) } classTwo{ varvalue1:String? varvalue2:Int? varvalue3:MyStruct? funcsetValueBind(value:ValueBind){ switchvalue{ case.bindStringValue(letstr): print(str) case.bindModel(letmodel): print(model.value) case.bindIntValue(letnum) print(num) } } }
利用枚举关联值之后,咱们的代码马上就简洁了不少。
自定义枚举类型
平常我们使用枚举时,我们在为枚举定义value时,一般就只用了几种基本的类型:
enumDirection{ caseleft casetop caseright casebottom } enumStringEnum:String{ casehello="hello" caseworld="world" } enumIntEnum:Int{ caseone=1 casetwo=2 }
但是,如果我们需要在枚举类型放入我们自定义的类型的话,我们就需要为枚举加一些东西了。
enumCustomEnum:RawRepresentable{ typealiasRawValue=MyStruct casenull caseone casetwo init?(rawValue:MyStruct){ switchrawValue.value{ case1: self=.one case2: self=.two default: self=.null } } varrawValue:MyStruct{ switchself{ case.one: returnMyStruct(1) case.two: returnMyStruct(2) default: returnMyStruct(nil) } } }
我们让枚举遵守RawRepresentable协议,并实现协议的一些属性及方法:
/* 将枚举的RawValue关联为自己希望的类型 **/ associatedtypeRawValue /* 利用自己关联的类型生成枚举的实例 **/ init?(rawValue:Self.RawValue) /* 将自己定义的类型的作为RawValue返回 **/ varrawValue:Self.RawValue{get}
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对毛票票的支持。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。