博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Swift中一个类中的枚举(enum)类型的数据该如何实现序列化(NSCoder)
阅读量:6937 次
发布时间:2019-06-27

本文共 1418 字,大约阅读时间需要 4 分钟。

简述

  • 昨天在开发中遇到了这样一个问题,需要用NSUserDefaults持久化一些数据,其中需要保存一个自己定义的类对象。这就需要我们去实现序列化与反序列化,即把对象转化成二进制数据存入取出时再将二进制数据恢复。


实现序列化

class GameData: NSObject{    var level:Int!    var gameMode:GameMode!    init(level l:Int, gameMode gm:GameMode){        level = l        gameMode = gm    }        required init?(coder aDecoder: NSCoder) {        self.level = aDecoder.decodeIntegerForKey("Level")    }        func encodeWithCoder(aCoder:NSCoder){        aCoder.encodeInteger(level,forKey:"Level")    }}
  • 这是我定义的一个类,用来记录游戏模式和游戏的关卡数,我们可以看到level的序列化很好实现因为他是一个Int类型,然而在实现GameMode序列化的时候却出了问题,我没法使用aDecoder.decodeObjectForKey()因为我的GameMode是个枚举enum啊-_-

enum GameMode {    case Practice, Challenge}
  • 上面就是我定义的枚举


解决办法

  • 办法很容易,我们只需要将其变成一个定义值得枚举即可。

enum GameMode: Int {    //不定义值也行,默认就是从0开始    case Practice = 0    case Challenge = 1}
  • 接下来序列化就很简单了。

class GameData: NSObject{    var level:Int!    var gameMode:GameMode!    init(level l:Int, gameMode gm:GameMode){        level = l        gameMode = gm    }        required init?(coder aDecoder: NSCoder) {        self.level = aDecoder.decodeIntegerForKey("Level")        self.gameMode = GameMode(rawValue: aDecoder.decodeIntegerForKey("GameMode"))    }        func encodeWithCoder(aCoder:NSCoder){        aCoder.encodeInteger(level,forKey:"Level")        aCoder.encodeInteger(gameMode.rawValue, forKey: "GameMode")    }}
  • 我们根据rowValue去进行序列化以及初始化话就行了。


结束

  • 其实枚举本来就是一个Int,因此我们将其声明为Int型就可以根据Int值初始化了,以此实现序列化和反序列化。

转载地址:http://vibnl.baihongyu.com/

你可能感兴趣的文章
深入浅出CChart 每日一课——第十三课 似曾相识之云图,乱花渐欲迷人眼
查看>>
Oracle操作的部分ddl语句
查看>>
Excel 中使用SQL 语句查询数据(四)
查看>>
序列动作Sequence
查看>>
SpringMVC 架构、原理
查看>>
Spring Shiro
查看>>
小蚂蚁学习数据结构(10)——树的基本介绍
查看>>
linux apache
查看>>
在CMD命令行下关闭进程的命令
查看>>
puppet学习笔记之安装与配置
查看>>
ROS教程(6)---×××配置及应用
查看>>
Nginx服务器搭建和基本配置详解
查看>>
vSphere 4.1 的新增功能
查看>>
栈的实现,入栈判断是否Full,出栈判断是否Empty
查看>>
nagios 安装配置
查看>>
centos 6.5下搭建ipsec/xl2tpd ×××
查看>>
【BFS】POJ 3278
查看>>
Python字符串格式化
查看>>
计算时针与分针夹角的度数的算法
查看>>
访问者设计模式
查看>>