让我们考虑一下这可能不是不合理的代码:
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所示?那不应该总是错误,而不是让我继续愉快,直到我发布 - 构建?
MyP
是内部的,MyS
的外部用户将看不到debugDescription
。我错过了什么吗?