Swift私有类成员默认访问权限疑问:文档与实际行为不符?
为什么Swift中私有类的隐式私有方法能在同一文件的类外部访问?
这不是文档错误,是你对Swift访问控制规则的细节有遗漏。
Swift的访问控制规则里有个容易被忽略的细节:当类型被标记为private或fileprivate时,它的成员默认访问级别是fileprivate,而非与类型一致的private。
这么设计的原因很实际:如果private类的成员也被限制为仅类内部可访问的private,那这个类在同一文件的其他地方基本没用——你能创建实例,但调用不了任何方法或属性,完全失去了实用性。所以Swift特意调整了这个默认行为,让私有类型的成员默认拥有文件级别的访问权限,确保在同一文件内可以正常使用该类型的所有功能。
你可以做个验证:如果手动把方法标记为private,它就无法在类外部访问了:
private class SomePrivateClass { private func somePrivateMethod() {} // 显式指定private } SomePrivateClass().somePrivateMethod() // 此处编译报错,符合private访问权限的预期
内容的提问来源于stack exchange,提问作者Yousaf
相关产品推荐
相关产品推荐

