Swift 中的下划线“_”是什么意思?

What does an underscore "_" mean in Swift?

我刚刚在浏览 Swift 模块 headers 时发现了这个:

protocol _ObjectiveCBridgeable {

同样:

protocol _SequenceType {

来自 Objective-C 背景,这对我来说似乎非常不合常规。下划线 _ 通常表示相关实体是私有的,并且通常在 header 可见性方面是隐藏的。为什么在 Swift 中它们是公开可见的? Swift 的命名约定是否已更改?

就 Swift 而言,惯例 似乎已经改变 ,如下所示:

/// This protocol is an implementation detail of `SequenceType`; do
/// not use it directly.
///
/// Its requirements are inherited by `SequenceType` and thus must
/// be satisfied by types conforming to that protocol.
protocol _SequenceType {
}

如您所见,下划线 _ 现在似乎暗示相关实体是其逻辑子项的 'implementation detail'。

我相信(Swift 开发团队已在论坛上声明)目前 Swift 存在特定限制,这迫使他们对各种协议进行两部分声明。大概最终这些会消失,并且这些方法将迁移到非下划线版本。只要你只使用非下划线,当这种情况发生时你的代码应该可以重新编译,因此你永远不应该直接实现 _ 版本。