| 测试已测试 | ✗ |
| Lang语言 | SwiftSwift |
| 许可证 | MIT |
| 发布最后发布 | 2017年9月 |
| SwiftSwift版本 | 4.0 |
| SPM支持SPM | ✗ |
由Bartosz Polaczyk维护。
用于枚举所有枚举情况的库(用于Swift或Int RawValue)。
EnumList不依赖于非内存反射,因此设计上稳健,在未来的Swift版本中更加稳定。
此分支官方支持Swift 3.1,但代码与Swift 4.0兼容。
如果想要使用具有Codable支持的Swift 4.0,请检查swift4分支。
为了使您的enum(具有String原始值)与EnumList兼容,请添加符合协议EnumListStringRaw<NAME_OF_YOUR_ENUM.Values>, RawRepresentable,并定义嵌套结构体Values。
尽管您可以选择名称和放置符合StringEnumValues或IntEnumValues的结构体(例如,YourEnumName.Values),但建议将其保持为嵌套类型。
private enum YourEnumName: EnumListStringRaw<YourEnumName.Values>, RawRepresentable{
struct Values:StringEnumValues {
typealias Element = YourEnumName
static var allRaws:Set<String> = []
}
case caseNo1 = "case1"
case caseNo2 = "case2"
//case caseNo3 = "case2" - compile error: RawValues have to be unique
}
YourEnumName.Values.all // Set([.caseNo1, .caseNo2])
YourEnumName.Values.allRaws // Set(["case1", "case2"])
您所有的情况都存在于静态的Set<YourEnumName>变量`YourEnumName.Values.all.
您仍然可以使用之前的方法创建您的枚举实例,使用字面量初始化`init?(rawValue:)`。
let myCase = YourEnumName(rawValue: "case1") // myCase = .caseNo1如果您不能使用字面量(例如当您从其他地方接收到的只有String实例时),您可以使用`init?(raw:)`初始化器创建它。
let someString = "case1"
...
let myCase = YourEnumName(raw: someString) // myCase = .caseNo1
let myOtherCase = YourEnumName(raw: "case1") // myOtherCase = .caseNo1Int原始值的枚举在处理带有Int原始值时,EnumList的作用相同
private enum YourIntEnum: EnumListIntRaw<YourIntEnum.Values>, RawRepresentable{
struct Values:IntEnumValues {
typealias Element = YourIntEnum
static var allRaws:Set<Int> = []
}
case caseNo1 = 1
case caseNo2 = 3
}
YourIntEnum.Values.all // Set([.caseNo1, .caseNo2])
YourIntEnum.Values.allRaws // Set([1, 2])
let myCase = YourIntEnum(rawValue: 1) // .caseNo1
与标准 enum 相同,您无需手动指定所有原始值。编译器将为您填充,使用与情况名称相同的相同 String 原始值。您可以将自定义/自动 rawValue 的情况混合。
private enum YourEnumName: EnumListStringRaw<YourEnumName.Values>, RawRepresentable{
struct Values:StringEnumValues {
typealias Element = YourEnumName
static var allRaws:Set<String> = []
}
case caseNo1 // is equivalent to case caseNo1 = "caseNo1"
case caseNo2 = "case2"
}
YourEnumName.Values.all // Set([.caseNo1, .caseNo2])
YourEnumName.Values.allRaws // Set(["caseNo1", "case2"])
您可以获取所有原始值(根据您的 enum 定义,它们可能是 Set 或 Set),但请注意,在此之前,您必须调用 YourEnumName.Values.initialize() 或 YourEnumName.Values.all,以便将有效的值填充到 YourEnumName.Values.allRaws。
Swift 不允许创建具有相同字面量的多个 enum 情况。这也适用于 EnumList。
private enum YourEnumName: EnumListStringRaw<YourEnumName.Values>, RawRepresentable{
struct Values:StringEnumValues {
typealias Element = YourEnumName
static var allRaws:Set<String> = []
}
case caseNo1 = "case1"
//case caseNo2 = "case1" - compile error: RawValues have to be unique
}如果您想使用您的 enum 与 Unbox 框架,请在 Podfile 中包含额外的子规范,即 EnumList/Unbox。
target 'TARGET' do
pod 'EnumList/Core'
pod 'EnumList/Unbox'
end然后通过使您的枚举符合 UnboxableEnum,它将直接工作。
private enum EnumForUnbox: EnumListStringRaw<EnumForUnbox.Values>, RawRepresentable, UnboxableEnum{
struct Values:StringEnumValues {
typealias Element = EnumForUnbox
static var allRaws:Set<String> = []
}
case caseNo1 = "case1"
case caseNo2 = "case2"
}
let dictionary:[String:Any] = ["data":"case1"]
let a = Unboxer(dictionary:dictionary)
let unboxEnum:EnumForUnbox = try a.unbox(key: "data") // .caseNo1库由单元测试覆盖:要运行与 EnumListPoroject.xcodeworkspace 项目集成的测试,请在终端中安装所有 CocoaPods 依赖项(运行 pod install)并运行默认单元测试(⌘+U)。
要命令行测试所有单元测试,请在 项目 目录中调用 'fastlane test'。
使用 fastlane 构建项目:[fastlane 读取材料](https://raw.github.com/polac24/EnumList/v0.1.1/Project/fastlane/)。
我们使用 SemVer 进行版本控制。有关可用版本的信息,请参阅[此存储库上的标签](https://github.com/polac24/EnumList/tags)。
另请参阅参与此项目的贡献者列表。
此项目在 MIT 许可证下授权 - 有关详细信息,请参阅LICENSE 文件。