我正在内部(公司)实施一个框架,其中应用程序应该基于提供的Type工作。我打算将该类型实现为枚举。但是,尝试自定义该功能的开发人员应该能够扩展Type并能够为其添加更多选项。由于我们无法扩展枚举以添加更多案例,因此我一直在寻找替代方案。
答案 0 :(得分:0)
您可以将自定义struct
用作可扩展标识符,而不必仅通过手动符合OptionSet
使其成为RawRepresentable
,如下所示。这也有一个有用的副作用,即用户无法传递值的数组,就好像它们是值本身的单个实例一样,如果您想要唯一性,这是不可取的。以下是我处理唯一标识符的方法:
public struct Identifier: RawRepresentable, Hashable {
public typealias RawValue = String
public let rawValue: RawValue
public init?(rawValue: RawValue) {
self.rawValue = rawValue
}
public var hashValue: Int {
return rawValue.hashValue
}
static let unknown = Identifier(rawValue: "Unknown")
}
有了这个,用户可以使用更多静态变量扩展结构,如下所示:
extension Identifier {
static let item1 = Identifier(rawValue: "Item 1")!
static let item2 = Identifier(rawValue: "Item 2")!
static let item3 = Identifier(rawValue: "Item 3")!
}