Options

选项

EnumOptionSet 类型提供更强大的选项。

SwiftPM Twitter GitHub GitHub issues GitHub Workflow Status

Codecov CodeFactor Grade codebeat badge Code Climate maintainability Code Climate technical debt Code Climate issues Reviewed by Hound

目录

简介

OptionsEnumOptionSet 类型提供了一组强大的功能

要求

Apple 平台

Linux

安装

使用 Swift Package Manager 通过存储库 URL 安装此库

https://github.com/brightdigit/Options.git

使用 1.0 及以下的版本。

用法

多功能选项

假设我们正在使用 Enum 作为流行社交媒体网络的列表

enum SocialNetwork : Int {
  case digg
  case aim
  case bebo
  case delicious
  case eworld
  case googleplus
  case itunesping
  case jaiku
  case miiverse
  case musically
  case orkut
  case posterous
  case stumbleupon
  case windowslive
  case yahoo
}

我们将使用它作为定义特定社交句柄的一种方式

struct SocialHandle {
  let name : String
  let network : SocialNetwork
}

但是,我们也希望提供一种方法来拥有一个独特的可用社交网络集

struct SocialNetworkSet : Int, OptionSet {
...
}

let user : User
let networks : SocialNetworkSet = user.availableNetworks()

然后我们可以简单地使用 Options() 宏来生成这两种类型

@Options
enum SocialNetwork : Int {
  case digg
  case aim
  case bebo
  case delicious
  case eworld
  case googleplus
  case itunesping
  case jaiku
  case miiverse
  case musically
  case orkut
  case posterous
  case stumbleupon
  case windowslive
  case yahoo
}

现在我们可以使用新创建的 SocialNetworkSet 类型来存储一组值

let networks : SocialNetworkSet
networks = [.aim, .delicious, .googleplus, .windowslive]

多种值类型

通过 Options() 宏,我们添加了从原始值以及另一种类型(如字符串)编码和解码值的能力。 这在你想要以 JSON 格式存储值时非常有用。

例如,对于像 SocialNetwork 这样的类型,我们需要将值存储为整数

5

但是,通过添加 Options() 宏,我们也可以从字符串解码

"googleplus"

创建选项集

我们还可以创建一个新的 OptionSet 类型。 Options() 创建一个带有后缀 -Set 的新 OptionSet 类型。 这个新的 OptionSet 将自动与你的枚举一起工作,以创建一个不同的值集。 此外,它将把你的值编码和解码为字符串数组。 这意味着这个值

[.aim, .delicious, .googleplus, .windowslive]

被编码为

["aim", "delicious", "googleplus", "windowslive"]

更多代码文档

文档在这里

许可证

此代码在 MIT 许可证下发布。 有关更多信息,请参见 LICENSE 文件。