Swift自定义类型enum类

2016-11-22  本文已影响119人  真笨笨鱼

用Swift 自定义enum类型做的错误码

       一般我们通过整数或者字符串来做enum类型的值,这里我们用了一个EageyeErrorCode的结构体来做enum的值,在playground上搞定以下几个要点才可以运行,也花费了不少时间,swift的enum类型真是博大精深。

1、StringLiteralConvertible 字面量转换

将字符串转换为EageyeErrorCode 结构

2、Equatable可等性协议

==方法,似乎必须实现Equatable才可以使用自己定义的struct做enum的元素

3、enum的构建方法

自己写了一个valueOfId的静态方法,来讲error码定位到错误枚举类型

4、代码如下:


structEageyeErrorCode:Equatable{

varcode:String=""

vartitle:String=""

vardescribe:String=""

varhttpRspCode:Int=0

init() {

self.code=""

self.title=""

self.describe=""

self.httpRspCode=0

}

init(code:String, title:String, desc:String, httpRspCode:Int) {

self.code= code

self.title= title

self.describe= desc

self.httpRspCode= httpRspCode

}

}

func== (lhs:EageyeErrorCode, rhs:EageyeErrorCode) ->Bool{

returntrue

}

//extension EageyeErrorCode: ArrayLiteralConvertible {

//

//init(arrayLiteral elements: String...) {

//self.code = elements[0]

//self.title = elements[1]

//self.describe = elements[2]

//self.httpRspCode = Int(elements[3])!

//}

//}

extensionEageyeErrorCode:StringLiteralConvertible{

init(stringLiteral value:String) {

leterror =errorCodeFromString(value)

self.code= error[0]

self.title= error[1]

self.describe= error[2]

self.httpRspCode=Int(error[3])!

}

init(extendedGraphemeClusterLiteral value:String) {

leterror =errorCodeFromString(value)

self.code= error[0]

self.title= error[1]

self.describe= error[2]

self.httpRspCode=Int(error[3])! }

init(unicodeScalarLiteral value:String) {

leterror =errorCodeFromString(value)

self.code= error[0]

self.title= error[1]

self.describe= error[2]

self.httpRspCode=Int(error[3])!

}

funcerrorCodeFromString(str:String) -> [String] {

letstring:NSString= str

letsubstringArry = string.componentsSeparatedByString(",")

returnsubstringArry

}

}

enumErrorCodeType:EageyeErrorCode{

// case ERROR_00100 = ["00100", "公共基础异常", "公共基础异常", "500"]

caseERROR_00100 ="00100,公共基础异常,公共基础异常,500"

caseERROR_00101 ="00101,公共基础异常,空指针异常,500"

staticfuncvalueOfId(id:String) ->ErrorCodeType{

switchid {

case"00100":

returnERROR_00100

case"00101":

returnERROR_00101

default:

returnERROR_00100

}

}

}

ErrorCodeType.ERROR_00100.rawValue.code

ErrorCodeType.ERROR_00100.rawValue.describe

ErrorCodeType.ERROR_00100.rawValue.httpRspCode

ErrorCodeType.valueOfId("00100")

上一篇下一篇

猜你喜欢

热点阅读