枚举功能的替代品,能够在Swift中扩展

时间:2017-10-12 07:12:56

标签: ios swift swift3 enums frameworks

我正在内部(公司)实施一个框架,其中应用程序应该基于提供的Type工作。我打算将该类型实现为枚举。但是,尝试自定义该功能的开发人员应该能够扩展Type并能够为其添加更多选项。由于我们无法扩展枚举以添加更多案例,因此我一直在寻找替代方案。

1 个答案:

答案 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")!
}