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