当我在 Swift 4 中明确使用内部访问控制级别时
When I use internal access control level explicitly in Swift 4
我对内部访问控制级别有疑问
Internal
是 Swift
中的 default
访问控制级别
所以我认为应该删除所有 internal
访问控制
在Swift中是否有明确使用internal
访问控制的具体案例?
何时或如何在 Swift 中使用 internal
访问控制?
根据文档:
Default Access Levels
All entities in your code (with a few specific
exceptions, as described later in this chapter) have a default access
level of internal if you don’t specify an explicit access level
yourself. As a result, in many cases you don’t need to specify an
explicit access level in your code.
来源:https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html
正如您所提到的,使用 "internal" 关键字除了明确表示将来不应该在没有仔细考虑的情况下 public 之外没有任何效果。此时使用 "internal" 关键字更多的是记录和注释您的代码。
当使用默认访问级别内部时,无需显式添加内部。
这意味着 SomeInternalClass 和 someInternalConstant 可以在没有显式访问级别修饰符的情况下编写,并且仍然具有内部访问级别。然而,关键字 "internal" 仅供开发人员理解。
class SomeInternalClass {} // implicitly internal
let someInternalConstant = 0 // implicitly internal
我发现一个案例internal
需要明确添加:
public internal(set) var myInt = 0
省略 internal
关键字会导致编译错误。
这在 swift package/pod 中特别有用。 属性 是公开的,但只能在package/pod 内部,可以更改值。
我对内部访问控制级别有疑问
Internal
是 Swift
default
访问控制级别
所以我认为应该删除所有 internal
访问控制
在Swift中是否有明确使用internal
访问控制的具体案例?
何时或如何在 Swift 中使用 internal
访问控制?
根据文档:
Default Access Levels All entities in your code (with a few specific exceptions, as described later in this chapter) have a default access level of internal if you don’t specify an explicit access level yourself. As a result, in many cases you don’t need to specify an explicit access level in your code.
来源:https://docs.swift.org/swift-book/LanguageGuide/AccessControl.html
正如您所提到的,使用 "internal" 关键字除了明确表示将来不应该在没有仔细考虑的情况下 public 之外没有任何效果。此时使用 "internal" 关键字更多的是记录和注释您的代码。
当使用默认访问级别内部时,无需显式添加内部。 这意味着 SomeInternalClass 和 someInternalConstant 可以在没有显式访问级别修饰符的情况下编写,并且仍然具有内部访问级别。然而,关键字 "internal" 仅供开发人员理解。
class SomeInternalClass {} // implicitly internal
let someInternalConstant = 0 // implicitly internal
我发现一个案例internal
需要明确添加:
public internal(set) var myInt = 0
省略 internal
关键字会导致编译错误。
这在 swift package/pod 中特别有用。 属性 是公开的,但只能在package/pod 内部,可以更改值。