【问题标题】:Swift. Declaring private functions in internal protocol迅速。在内部协议中声明私有函数
【发布时间】:2017-03-03 18:11:58
【问题描述】:

我怎样才能实现这样的事情(不编译):

internal protocol InternalPrivateMix {
    private func doPrivately()
    internal func doInternaly()
}

基本上,我想做出一个承诺,即确认类会私下实现某些功能。这更适用于自我文档。我显然可以在我的类中实现这些功能,而无需正式遵守协议,并编写描述每个类都应实现此功能的文档。虽然如果我能更正式地将我的意图传达给其他开发人员,那就太好了。

编辑:我尝试在一个文件中实现两种协议,一种是私有的,一种是内部的,正如@creeperspeak 所建议的那样。但是我不能遵守其他文件中的私有协议,所以它不起作用。

【问题讨论】:

  • 根据 Apple 的文档:如果要为协议类型分配显式访问级别,请在定义协议时执行此操作。这使您能够创建只能在特定访问上下文中采用的协议。协议定义中每个需求的访问级别会自动设置为与协议相同的访问级别。您不能将协议要求设置为与其支持的协议不同的访问级别。这确保了协议的所有要求在采用该协议的任何类型上都是可见的。

标签: swift protocols


【解决方案1】:

From Apple's docs 看起来实现您想要做的事情的唯一方法是实现 2 个协议 - 一个是内部的,一个是私有的,正如 Apple 所说的“您不能将协议要求设置为与它支持的协议。”

【讨论】:

  • 我之前试过了,但是fileA中的私有协议在fileB中是不能符合的。还有其他方法吗?据我所知,没有。
  • 听起来有点像您不希望它成为私有协议。根据定义,“私有”意味着它不能从其他文件访问。如果您确实希望私有协议仅可从单个文件中使用,但又希望另一个类继承它,则可以将其设为 fileprivate 并在同一文件中实现继承类的扩展来处理它。
  • 嗯,是的,我不想要'Swift' 含义的私有协议。我希望能够在内部协议中将函数标记为私有。这在当前的 Swift 版本中似乎是不可能的。
  • @creeperspeak 你能给个文档链接吗?
  • @SubhajitHalder 编辑答案以包含链接。
【解决方案2】:

你可以这样做:

protocol P {
    func int()
}

extension P {
    func int() {
        print("int()")
        priv()
    }
    private func priv() {
        print("priv()")
    }
}

这可能符合您的目的 - 我使用它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多