有没有办法隐藏该类符合某些协议?就像在 Objective-C 中一样 - 仅用于在.m
文件中添加协议,而其他类(来自其他文件)则没有看到它。
例如。我有一个测试单元,它有一个文本字段。我想隐藏,这个单元格符合协议。这样的事情:
class TestCell: UITableViewCell {
}
fileprivate extension TestCell : UITextFieldDelegate {
}
但编译器发誓我。任何优雅的解决方
答案 0 :(得分: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
私人一致性的主要问题是与之互动 动态铸造。如果我有这个代码:
func foo(value: Any) { if let x = value as? P { print(“P”) } } foo(X())
在什么情况下应该打印“P”?如果定义了foo() 在与X到P的一致性相同的模块中?如果是电话 在与X到P的一致性相同的模块中定义?决不? 前两个答案中的任何一个都需要明显的复杂性 动态铸造基础设施,以考虑模块 发生了特定的动态演员(第一个选项)或在哪里 形成了一个存在主义(第二个选择),而第三个答案 打破静态和动态类型系统之间的联系 - 没有 这是可以接受的结果。