代码1:
protocol PickableEnum
{
var displayName: String { get }
var permanentID: String { get }
static var allValues: [Self] { get }
static func fromPermanentID(id: String) -> Self?
} //下面的扩展表面了这个协议的实例必须实现了RawRepresentable协议,并且字面值必须是Int类型
extension PickableEnum where Self: RawRepresentable, Self.RawValue == Int
{
var displayName: String
{
return Localised("\(self.dynamicType).\(self)")
} var permanentID: String
{
return String(self)
} static var allValues: [Self]
{
var result: [Self] = []
var value =
while let item = Self(rawValue: value)
{
result.append(item)
value +=
}
return result
}

  //这个方法巧妙运用了函数式编程,通过id,在allValues数组中查询一个实现了此协议的对象
static func fromPermanentID(id: String) -> Self?
{
return allValues.indexOf { $.permanentID == id }.flatMap { self.init(rawValue: $) }
}
}

最新文章

  1. 学习zepto.js(对象方法)[4]
  2. 根据位置信息提取 fasta 文件中的序列 -- extract fasta sequence by their position
  3. hadoop命令行命令
  4. [原]Unity3D深入浅出 - 物理引擎之碰撞体(Colliders)
  5. laravel route路由,视图和response和filter
  6. LED汽车前大灯
  7. ToggleButton --------- 按钮实现开关效果
  8. 自己动手编写Maven的插件
  9. ReactNative学习之Html基础
  10. mysql按某个列执行1-N排名的问题
  11. 【java】java基本用法记录
  12. Fiddler 会话查找功能
  13. WebAPi使用Autofac实现依赖注入
  14. HDU4655【题意+分析】
  15. 黄聪:wordpress获取hook所有function
  16. 对 JavaScript 中的5种主要的数据类型进行值复制
  17. 【转】了解CNN
  18. WCF系列教程之WCF服务配置
  19. LeetCode33 搜索旋转排序数组
  20. Sum of Consecutive Integers LightOJ - 1278(推公式 数学思维)

热门文章

  1. windows phone 8环境搭建
  2. UML六种关系
  3. C#实战Microsoft Messaging Queue(MSMQ)
  4. Go语言Web框架gwk介绍2
  5. 在MVC3中使用WebForm
  6. rabbitmq在mac上安装
  7. Android消息推送之GCM方式(一)
  8. kubernetes service分析
  9. 某大神C#框架后台发送信息的查找及破解
  10. 【Spring】基于注解的实现SpringMVC+MySQL