可以重新声明 Swift 内置协议(protocol)吗?为什么?

标签 swift protocols declaration

我发现了一个非常令人困惑的事情:我们可以重新声明 swift 内置协议(protocol),任何人,例如 SequenceUITableViewDelegate。没有编译错误,甚至没有警告。有人可以向我解释为什么吗?如果这是真的,它将如何影响内置的?

最佳答案

I found a very confusing thing: we can redeclare the swift build-in protocol, anyone, such as Sequence and UITableViewDelegate. No compile error, even no warning. Can someone explain me why?

类、结构、枚举、协议(protocol)和全局变量都是由模块名称分隔的名称。如果您在应用程序 MyApp 中声明一个名为 Sequence 的协议(protocol),则其全名将是 MyApp.Sequence。为方便起见,如果省略名称的模块部分,编译器将尝试猜测它是什么。

If that's the truth, how would it affect the built-in ones?

如果您确实在其中一个系统模块中定义了与类型同名的内容,编译器将在同一模块中优先使用您的版本。其他人的代码,包括 Apple 框架中的代码,将不受影响。您可以通过指定类型的模块名称来消除歧义。因此,在 MyApp 中,您可以通过编写 Swift.Sequence 来使用原始的 Sequence(Swift 是Swift 标准库类型)。

关于可以重新声明 Swift 内置协议(protocol)吗?为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42643654/

相关文章:

ios - 通过 NSDate 检查值是否存在作为字典中的键

ios - 减少解析 PFFile、图像和文本

html - Swift - 在 UiWebView 中加载本地 Html

swift - 协议(protocol)中的继承是什么

C++ 在 if 语句中声明变量

macos - 在 OSX 中,访问(可选?) NSView 子类的属性 "identifier"会导致访问错误

ios - Objective-C 协议(protocol)

ios - UIView 到 UIViewController 通过协议(protocol)的通信不起作用

c++ - 不同文件的类声明

Javascript 变量定义 - 说明