我有一个示例代码:
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))
我如何使用私有(private)构造函数和公共(public)静态属性(如一个一个、两个)来限制手动创建?
最佳答案
你不能。当您使类型符合协议(protocol)时,所有必需的 stub 的保护级别必须至少等于该类型的保护级别。我将尝试解释原因。
假设我有一个符合Hashable
的类型Foo
。然后我将一个实例分配为 Hashable
类型:
let foo: Hashable = Foo()
因为实例是 Hashable
类型,所以我保证可以访问 hash(into:)
方法。但是,如果我将方法设为私有(private)怎么办?在这一点上,你最终会出现意想不到的行为。由于某种原因,我无法访问保证可以访问的方法,或者我可以访问我不应该访问的方法。这是访问级别的冲突。
是的,你想做的事是不可能的。
关于swift - 具有私有(private)构造函数的公共(public) OptionSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43775967/