为 Enum
和 OptionSet
类型提供更强大的选项。
Options 为 Enum
和 OptionSet
类型提供了一组强大的功能
RawType rawValue
之外,为 Enum
类型提供额外的表示形式Enum
和 OptionSet
类型之间互换Codable
OptionSet
使用额外的值类型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 文件。