美文网首页斯威夫特
private、fileprivate、internal、pub

private、fileprivate、internal、pub

作者: 因缺思婷 | 来源:发表于2017-06-19 16:59 被阅读0次

    在Swift语言中,访问修饰符有五种,分别为fileprivate,private,internal,public和open,其中 fileprivate和open是Swift 3新添加的。由于过去 Swift对于访问权限的控制是基于文件的,不是基于类的。这样会有问题,所以Swift 3新增了两个修饰符对原来的private、public进行细分。

    private

     private所修饰的属性或者方法只能在当前类里访问

     private所修饰类只能在当前.swift文件里访问

    fileprivate

    fileprivate访问级别所修饰的属性或者方法在当前的Swift源文件里可以访问。

    internal(默认访问级别,internal修饰符可写可不写)

    internal访问级别所修饰的属性或方法在源代码所在的整个模块都可以访问、被继承、被重写

    如果是框架或者库代码,则在整个框架内部都可以访问,框架由外部代码所引用时,则不可以访问。即使使用import,也会提示错误:

    No such module '...'

    如果是App代码,也是在整个App代码,也是在整个App内部可以访问。

    public

    可以被任何类访问。但其他module中不可以被override和继承,而在module内可以被override和继承。

    Cannot inherit from non-open class '...' outside of its defining module

    open

    可以被任何类使用,包括override和继承。

    访问权限排序从高到低排序:open>public>interal > fileprivate >private

    总结

    属性和方法的访问控制通俗的分级顺序应该是:

    当前类(private)、当前swift文件(fileprivate)、 当前模块(internal)、其它模块(open、public)

    属性和方法的修饰:在当前模块internal、open、public是同一级别,在外模块open、public是同一级别

    类的访问级别:

    当前类(private)、当前swift文件(fileprivate)、 当前模块(internal)、其它模块(open需要import)、是否可被继承被重写(public需要import)

    可以发现cocopod导入的第三方库,作为外模块一般都是使用的open、public修饰类,来提供给项目使用

    相关文章

      网友评论

        本文标题:private、fileprivate、internal、pub

        本文链接:https://www.haomeiwen.com/subject/hgtnqxtx.html