在Swift 1.2中编码和解码枚举

Nik*_*nov 3 nscoder ios swift

enum在我的Swift类中声明了一个变量.我需要使用编码和解码它NSCoder.对于我应该使用的这个说法有很多问题rawValue.Enum声明如下:

enum ConnectionType {
    case Digital, PWM
}
Run Code Online (Sandbox Code Playgroud)

但是在Swift 1.2中没有这样的初始化器.在Swift 1.2和Xcode 6.3中如何做到这一点?

Mar*_*n R 6

你必须为枚举定义一个"原始类型",例如

enum ConnectionType : Int {
    case Digital, PWM
}
Run Code Online (Sandbox Code Playgroud)

然后你可以用它编码

aCoder.encodeInteger(type.rawValue, forKey: "type")
Run Code Online (Sandbox Code Playgroud)

和解码

type = ConnectionType(rawValue: aDecoder.decodeIntegerForKey("type")) ?? .Digital
Run Code Online (Sandbox Code Playgroud)

其中??如果解码的整数对枚举无效,则使用nil-coalescing运算符提供默认值.