微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

swift – 带有私有构造函数的公共OptionSet

我有一个示例代码

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

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

解决方法

你不能.将类型与协议一致时,所有必需存根的保护级别必须至少等于类型的保护级别.我会试着解释原因.

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

let foo: Hashable = Foo()

因为实例是Hashable类型,所以我保证可以访问hash(into :)方法.但是如果我将该方法设为私有呢?那时你最终会出现意想不到的行为.由于某种原因,我无法访问我保证访问的方法,或者我有权访问我无法访问的方法.这是访问级别的冲突.

所以,是的,你想做的事是不可能的.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐