swift - 具有私有(private)构造函数的公共(public) OptionSet

标签 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))

我如何使用私有(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/

相关文章:

properties - 多个实例中的 Swift 唯一属性

ios - 识别哪个 UISwitch 被点击

swift - 如何从 UICollectionView 中的多个部分传递数据

ios - 更改 MKAnnotation 引脚颜色

ios - 修复导航栏

swift - 我如何定义 Swift 协议(protocol),以便实现可以是属性或方法?

ios - 当我插入一条新记录时,UITableview 中没有显示

ios - 使用 URLRequestConvertible 在单元测试中链接错误

ios - 按下邮件编辑器中的发送按钮后应用程序崩溃

为 NSStream 快速创建字节缓冲区持有者