斯威夫特。在内部协议

问题描述:

声明私有函数如何能够做到这样的事情(不编译):斯威夫特。在内部协议

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

基本上我想那种做出确认类私下实现一些功能的承诺。这是更多的自我文档。我显然可以在我的类中实现这些功能,而无需正式遵守协议并编写描述每个类应实现此功能的文档。如果我能更正式地向其他开发者传达我的意图,那将是一件好事。

编辑:我试图在一个文件中实现两个协议,一个私人,一个内部作为@creeperspeak建议。但是我无法遵守其他文件中的私人协议,因此无法使用。

+0

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

从Apple的文档看来,实现您尝试执行的唯一方法是实现2个协议 - 一个是内部的,另一个是私有的,正如Apple所说的:“您不能将协议要求设置为不同的访问级别它支持的协议。“

+0

我曾尝试过,但如果它位于fileB中,我无法遵守fileA中的私有协议。有没有其他方法?据我所知,没有。 – user1264176

+0

听起来有点像你不希望它是一个私人协议。根据定义“私人”意味着它不能从其他文件访问。如果您真的希望私有协议只能从单个文件中获得,但您希望另一个类继承它,则可以将其设置为private并在同一文件中实现继承类的扩展以处理该私有协议。 – creeperspeak

+0

嗯,是的,我不希望私人协议在'Swift'的意思。我希望能够在内部协议中标记私有的函数。这在目前的Swift版本中似乎是不可能的。 – user1264176

你可以这样做:

protocol P { 
    func int() 
} 

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

这可能会成为你的目的 - 我使用它。