禁止在内部协议扩展中实现公共成员 - 有时候?

时间:2017-03-16 15:06:03

标签: swift compiler-errors swift-protocols

让我们考虑一下这可能不是不合理的代码:

internal protocol MyP: CustomDebugStringConvertible {
    var p: Int { get }
}

internal extension MyP {
    public var debugDescription: String {
        return "MyP(\(self.p))"
    }
}

它编译也很好。现在让我们添加一个结构,按照每个令人讨厌的设计原因,public

public struct MyS: MyP {
    internal var p = 3

    public func foo() {}
}

现在我得到了:

  

错误:属性'debugDescription'必须声明为public,因为它符合公共协议'CustomDebugStringConvertible'中的要求

有趣的是,如果我在另一个文件中声明这个结构,那么Debug构建很好,只有Release构建错误。

这是一个优化中的错误,还是一个语言“功能”¹,如this comment所示?那不应该总是错误,而不是让我继续愉快,直到我发布 - 构建?

  1. 从语义上讲,警告/错误似乎很幼稚。由于MyP是内部的,MyS的外部用户将看不到debugDescription。我错过了什么吗?

0 个答案:

没有答案