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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。
