swift – 为什么协议一致性扩展不能具有特定的访问级别?

swift – 为什么协议一致性扩展不能具有特定的访问级别?,第1张

概述假设我们有以下示例代码: protocol MyProtocol { func someFunction()}public class MyClass {}public extension MyClass: MyProtocol { func someFunction() { print("hello") }} 编译上面的代码会出现以下错误: 假设我们有以下示例代码:
protocol MyProtocol {    func someFunction()}public class MyClass {}public extension MyClass: MyProtocol {    func someFunction() {        print("hello")    }}

编译上面的代码会出现以下错误:

Error: ‘public’ modifIEr cannot be used with extensions that declare protocol conformances

如果我将扩展标记为私有,则会发生同样的情况.无论访问级别设置为什么,似乎都无法设置符合协议的扩展的访问级别.即使将协议声明设置为public或private也不会删除错误.

如果Swift符合协议,Swift以这种方式限制扩展访问级别的原因是什么?如果在类级别应用协议一致性,则不存在此类限制.

如果我遵守编译器并删除私有/公共标识,someFunction()的访问级别是什么?

extension MyClass: MyProtocol {    func someFunction() {        print("hello")    }}

我想在这种情况下它将遵循原始的MyClass实现并公开但我不确定.

这种行为是否存在,因为扩展中的协议一致性意味着整个类符合协议,因此在扩展中重新指定访问级别是多余的?

这是因为除了协议本身的访问级别之外,不可能在任何访问级别上遵循协议.换句话说,如果您拥有公共协议,则不能与其私有一致.这部分是因为协议一致性是可以在运行时查询的东西(因此在你所在的模块之间不一致,或者在不同的文件/模块中实现两次),部分原因是因为如果一个模块只是很奇怪类型符合一个文件中的协议,并且在其他文件中使用时不符合该协议.

至于你对someFunction的访问级别的问题,它遵循与任何其他函数相同的规则.也就是说,除非类型本身具有较低的访问级别,否则它默认为内部.因此,在您的情况下,如果MyClass和MyProtocol都是公共的,您可能会遇到编译器错误,告诉您someFunction()也需要标记为public.但是因为看起来MyProtocol实际上是内部的,所以省略任何访问修饰符就像someFunction()默认为internal.

总结

以上是内存溢出为你收集整理的swift – 为什么协议一致性扩展不能具有特定的访问级别?全部内容,希望文章能够帮你解决swift – 为什么协议一致性扩展不能具有特定的访问级别?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1089972.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-27
下一篇 2022-05-27

发表评论

登录后才能评论

评论列表(0条)

保存