0
点赞
收藏
分享

微信扫一扫

Swift4.0+ Access Control (open/public/internal/fileprivate/private)

Star英 2021-09-29 阅读 66
日记本

Swift原本有2种常见的访问控制修饰符:private和public。

在Swift3.0+,添加了fileprivate和open,他们可以看成是对private和public的进一步细分

网上的资料大多停留在Swift3.0,本以为在最新的Swift4.0+这些没发生变化。但其实不然



如果你不太明白上面的示意图,可以参考下我的理解方式:

我更喜欢分 文件/模块 去理解他们的区别。

一、声明一个Class A

二、Extension A

2.1 在相同文件中多 Class A扩展

2.2 在不同文件中多 Class A扩展

总结:

1 对于类扩展而言,用private和fileprivate修饰的属性和方法没有区别,在相同文件中可以正常调用,而在不同文件中都不能调用。

三、继承Class A

3.1 在相同文件中继承 Class A

3.2 在不同文件中继承 Class A

总结:

1 在相同文件中继承 Class A,private修饰的属性不能被调用,方法不能被重写,可以被调用。

2 在不同文件中继承 Class A,private和fileprivate修饰的属性都不能被调用,方法都不能被重写,可以被调用。

四、扩展Class A的子类

4.1 在相同文件扩展子类,即上面的Class C

4.2 在不同文件扩展子类,即上面的Class B

总结:

1 在相同文件扩展子类,private修饰的属性不能被调用,而方法可以。

2 在不同文件扩展子类,private和fileprivate修饰的属性都不能被调用,而方法斗可以。

以上是在Swift4.0+中属性和方法的访问权限的列举,仅方便查看。

访问权限以此为:open,public,internal(默认),fileprivate,private。这是不会变的。

相关代码:Demo

举报

相关推荐

0 条评论