我有一个示例代码:
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 )来构建公共结构来限制手动创建?
答案 0 :(得分:2)
不能。当您使类型符合协议时,所有必需的存根的保护级别必须至少等于该类型的保护级别。我会尝试解释原因。
假设我有一个符合Foo
的类型Hashable
。然后,我将一个实例指定为Hashable
类型:
let foo: Hashable = Foo()
由于实例的类型为Hashable
,因此保证可以访问hash(into:)
方法。但是,如果我将方法设为私有怎么办?到那时,您最终会出现意外行为。出于某种原因,我无法访问被保证可以访问的方法,或者我无法访问无法访问的方法。这是访问级别的冲突。
是的,您不可能做的事。