带有私有构造函数的public OptionSet

时间:2017-05-04 06:59:34

标签: swift

我有一个示例代码:

public struct MyOptions: OptionSet {
    public let rawValue: Int

    public init(rawValue: Int) {
        self.rawValue = rawValue
    }

    public static let one = MyOptions(rawValue: 1 << 0)
    public static let two = MyOptions(rawValue: 1 << 1)
}

在其他模块中,我可以这样做:

print(MyOptions.one)
print(MyOptions(rawValue: 10))

如何使用私有构造函数和公共静态属性(如 one two )来构建公共结构来限制手动创建?

1 个答案:

答案 0 :(得分:2)

不能。当您使类型符合协议时,所有必需的存根的保护级别必须至少等于该类型的保护级别。我会尝试解释原因。

假设我有一个符合Foo的类型Hashable。然后,我将一个实例指定为Hashable类型:

let foo: Hashable = Foo()

由于实例的类型为Hashable,因此保证可以访问hash(into:)方法。但是,如果我将方法设为私有怎么办?到那时,您最终会出现意外行为。出于某种原因,我无法访问被保证可以访问的方法,或者我无法访问无法访问的方法。这是访问级别的冲突。

是的,您不可能做的事。