隐藏类符合协议

时间:2016-11-29 16:43:43

标签: ios swift3

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

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

class TestCell: UITableViewCell {

}

fileprivate extension TestCell : UITextFieldDelegate {

}

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

1 个答案:

答案 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的一致性相同的模块中定义?决不?   前两个答案中的任何一个都需要明显的复杂性   动态铸造基础设施,以考虑模块   发生了特定的动态演员(第一个选项)或在哪里   形成了一个存在主义(第二个选择),而第三个答案   打破静态和动态类型系统之间的联系 - 没有   这是可以接受的结果。