swift 访问级别
swift的访问范围从大到小有:open, public, internal, fileprivate, private
一、private
1、属性和方法:同一文件内的同一个类,也可以是扩展类。如下所示,同一文件内,extension类可以访问 editCount属性
class Student { private var editCount: Int = 0 } extension Student { func getCurEditCount() -> Int { self.editCount += 1 return self.editCount } }
2、类:只能同一个文件内可以进行创建,并且创建出来的实例也需要设为private否则编译的时候就会提示错误
private class Student { private var editCount: Int = 0 } extension Student { func getCurEditCount() -> Int { self.editCount += 1 return self.editCount } } private var student = Student()
二、fileprivate
1、属性和方法:同一文件内的均可访问。如下所示,在同一文件内,虽然editCount被声明为fileprivate 但是外部依旧可以正常访问
class Student { fileprivate var editCount: Int = 0 } var student = Student() print(student.editCount)
2、类:只能在同一文件内进行创建,并且创建出来的实例需要声明为fileprivate或者private
三、internal
internal是默认的权限,如果没有默认的声明访问级别均为internal。internal可以在同一模块内任意访问
四、public
public是可以跨模块访问,但是不允许被继承和重写
五、open
当声明为open,则跨模块也能被继承和重写。访问范围是最大的
总结:
1、一个类被继承,则子类的访问范围不能比父类的大。特殊的地方:在一个文件内,如果父类被声明为private子类可以被声明为fileprivate。因为虽然为private但是访问范围跟fileprivate一样都在本文件内。
2、一个协议被继承,如果子类也是协议则子类的协议访问范围不能比父类大;如果子类不是协议则不用管协议的访问范围。
3、一个实例的访问范围不能比它对应的类大,同样的函数的访问范围不能比它返回的类的访问范围大。比如: private func testClass() -> PrivateClass {.....} 这里PrivateClass访问级别是private 则函数也需要为private。同样的如果 private func testClass(param: PrivateClass) -> PublicClass {.....} 这里testClass虽然返回的是PublicClass , 但是参数是PrivateClass 所以改函数也需要声明为private
4、为属性的setter声明更小的访问范围 public internal(set) var age: Int = 0 该age的get访问是public 但是set的访问范围只有internal
5、类的默认初始化与类的访问范围一致,默认初始化最大的访问范围是internal, 如果类的访问范围是public,则默认初始化需要显示设为public否则只为internal
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2020-05-12 cocos2dx CCTransitionScene