【问题标题】:When I use internal access control level explicitly in Swift 4当我在 Swift 4 中明确使用内部访问控制级别时
【发布时间】:2019-01-16 11:57:52
【问题描述】:

我对内部访问控制级别有疑问

Internal 是 Swift 中的default 访问控制级别

所以我认为应该删除所有internal 访问控制

有没有在 Swift 中显式使用internal 访问控制的具体案例?

我何时或如何在 Swift 中使用internal 访问控制?

【问题讨论】:

  • 可能在子类化时覆盖变量?
  • internal 标记仅在模块中可用的属性,在开发库或框架时非常重要 - 显然不能删除它。
  • @holex 他的意思是显式添加关键字。
  • @J.Doe,那么最好的方法是在 Swift Evolution Forums 上提出关于完全删除关键字的建议,看看社区怎么说,如果该关键字看起来多余。
  • @holex 由于关键字不必每次都包含,所以它不是多余的,同样适用于关键字 noescaping。

标签: swift acl access-control internal


【解决方案1】:

我发现一个案例internal需要显式添加:

public internal(set) var myInt = 0

省略 internal 关键字会导致编译错误。

这在 swift 包/pod 中特别有用。该属性是公开暴露的,但只能在包/pod 内部更改值。

【讨论】:

    【解决方案2】:

    使用默认访问级别 internal 时,无需显式添加 internal。 这意味着 SomeInternalClass 和 someInternalConstant 可以在没有显式访问级别修饰符的情况下编写,并且仍然具有内部访问级别。然而,关键字“internal”仅用于开发人员理解。

    class SomeInternalClass {}              // implicitly internal
    let someInternalConstant = 0            // implicitly internal
    

    【讨论】:

    • 我想出了一些新的东西,而这次确实需要明确添加内部:P
    【解决方案3】:

    根据文档:

    默认访问级别 代码中的所有实体(有一些特定的 异常,如本章后面所述)具有默认访问权限 如果您未指定显式访问级别,则为内部级别 你自己。因此,在许多情况下,您不需要指定 代码中的显式访问级别。

    来源:https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html

    正如您所提到的,使用“internal”关键字除了明确表示将来不应该在未经仔细考虑的情况下公开函数之外没有任何作用。此时使用“internal”关键字更多地是为了记录和注释您的代码。

    【讨论】:

    • 但由于某种原因,如果你查看所有的苹果包,internal 到处都明确指定。
    • @Era 是的,Apple 喜欢让事情变得明确且有据可查。
    • 哦,这就是为什么现在几乎每个新 API 都有 0 个文档甚至没有文档注释的原因:D
    猜你喜欢
    • 1970-01-01
    • 2016-07-09
    • 2018-08-25
    • 1970-01-01
    • 2017-12-23
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-05-28
    相关资源
    最近更新 更多