swift - 在 swift 中,什么时候在声明类时显式使用访问修饰符 "internal"会产生任何影响?

标签 swift

在 swift 中,什么时候在声明类时显式使用访问修饰符“internal”会产生任何影响?

最佳答案

它不会对编译器产生影响,因为它是默认设置(但请参阅下文)。但它可以通过发出意图信号,对阅读代码的开发人员产生影响。例如,考虑一个嵌套类型:

public struct X {
    struct Y {
         init() {}
    }
}

不经意的读者可能会认为 Y 是公开的,因为 X 是公开的。但这种情况并非如此。 Y 是内部的。在定义中添加显式 internal 可以清楚地表明缺少 public 是有意而非疏忽。

目前可以使用 internal 创建误导性的情况。例如:

private struct X {
    internal struct Y {
         init() {}
    }
}

人们可能认为这是一个错误(或至少是一个警告),但事实并非如此。这实际上是预期的行为(由 SE-0025 描述)。如果您想了解有关访问控制当前状态的更多信息,我推荐 SE-0025,因为它们在 Swift 3 中发生了变化。

关于swift - 在 swift 中,什么时候在声明类时显式使用访问修饰符 "internal"会产生任何影响?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39501757/

相关文章:

ios - 从不同的文件更新 TableView - 无法不带参数调用 'reloadData'

swift - 具有通用委托(delegate)的通用类。如何区分哪个对象的委托(delegate)正在执行回调?

ios - 数据值溢出

swift - 如何使用 segue "present modally"维护导航?

ios - 更新 UITableView 中的 UIImage

ios - 如果用户没有打开通知,如何获取 AppDelegate' didFinishLunchingWithOptions 处的通知 extradata(payloadData)

iOS11 - 无限期地在后台运行应用程序

swift - 如何在 swift 2.0 中将日期选择器中的当前日期限制为 future 15 天

swift - 无法将类型 'NSRange'(又名“_NSRange”)的值转换为预期参数类型 'Range<Data.Index>'(又名“Range<int>

random - 将 arc4random() 的结果转换为 Int 时崩溃