隐藏类符合协议的逻辑

Nik*_*nko 2 ios swift3

有没有办法隐藏该类符合某些协议?就像在Objective-C中一样 - 只是用于在.m文件中添加协议,而其他类(来自其他文件)则没有看到它.

例如.我有一个测试单元,它有一个文本字段.我想隐藏,这个单元格符合协议.像这样的东西:

class TestCell: UITableViewCell {

}

fileprivate extension TestCell : UITextFieldDelegate {

}
Run Code Online (Sandbox Code Playgroud)

但编译器发誓我.任何优雅的解决方

Dan*_*all 6

Swift团队已经表明这种能力"不太可能"实施.以下是关于它的原始主题:https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20160229/011666.html

有关此特定方案的具体说明如下:

私人合规

现在,协议一致性可以不低于符合类型的访问和协议访问的最小值.因此,符合公共协议的公共类型必须公开提供一致性.可以想象删除该限制,以便可以引入私有一致性:

public protocol P { } 
public struct X { }
extension X : internal P { … } // X conforms to P, but only within this module
Run Code Online (Sandbox Code Playgroud)

私有一致性的主要问题是与动态强制转换的交互.如果我有这个代码:

func foo(value: Any) {
    if let x = value as? P { print(“P”) } 
}
foo(X())
Run Code Online (Sandbox Code Playgroud)

在什么情况下应该打印"P"?如果foo()在与X到P的一致性相同的模块中定义?如果在与X到P的一致性相同的模块中定义了呼叫?决不?前两个答案中的任何一个都需要动态铸造基础设施中的重大复杂性,以考虑发生特定动态铸造的模块(第一选项)或形成存在物的模块(第二选项),而第三个答案打破了静态和动态类型系统之间的链接 - 没有一个是可接受的结果.