美文网首页
Swift-进阶 11:访问控制权限

Swift-进阶 11:访问控制权限

作者: Style_月月 | 来源:发表于2021-01-22 12:21 被阅读0次

    Swift 进阶之路 文章汇总

    主要介绍swift中的访问控制权限关键字

    private

    1、private:访问级别仅在当前定义的作用域内有效(单例中使用过)

    //8-1、private:访问级别`仅在当前定义的作用域内有效
    class CJLTeacher{
        static let shareInstance = CJLTeacher()
        private init(){}
    }
    var t = CJLTeacher.shareInstance
    

    filePrivate

    filePrivate:访问限制仅限制在当前定义的源文件中

    <!--1、在access.swift文件中定义CJLPartTimeTeacher-->
    fileprivate class CJLPartTimeTeacher: CJLTeacher{
        var partTime: Double?
        init(_ partTime: Double) {
            super.init()
            self.partTime = partTime
        }
    }
    
    <!--2、在main.swift中无法访问CJLPartTimeTeacher-->
    
    调用报错提示

    在access.swift文件中定义一个CJLPartTimeTeacher全局变量,系统报错,其主要原因是 pt 默认的权限是 Internal的,而CJLPartTimeTeacher的访问权限是fileprivate的,pt的权限大于CJLPartTimeTeacher,系统不允许这样,所以提示错误

    filePrivate报错提示
    • 需要使用private / fileprivate修饰pt
    private let pt = CJLPartTimeTeacher(10.0)
    //或者
    fileprivate let pt = CJLPartTimeTeacher(10.0)
    

    如果是直接定义在方法中的,可以不用访问权限修饰符

    func test(){
        let pt = CJLPartTimeTeacher(10.0)
    }
    

    Internal

    Internal:默认访问级别,允许定义模块中的任意源文件访问,但不能被该模块之外的任何源文件访问(例如 import Foundation,其中Foundation就是一个模块)

    <!--1、main.swift-->
    import Foundation
    class CJLTeacher{
        init(){}
    }
    let t = CJLTeacher()
    
    <!--2、custom-->
    import AppKit
    //访问main.swift中t,报错:Expressions are not allowed at the top level
    print(t)
    
    Internal报错提示
    报错的主要原因是tmain.swift文件中的默认权限是Internal,只能在同一个模块内使用,其属于Foundation模块,而custom.swift文件中不能调用t,是因为其属于AppKit模块,与Foundation并不是同一个模块,所以不能访问

    public

    public:开放式访问,使我们能够在其定义模块的任何源文件中使用代码,并且可以从另一个源文件访问源文件。但是只能在定义的模块中继承和子类重写

    open

    open:最不受限制的访问级别,可以在任意地方、任意模块间被继承、定义、重写

    public与open的区别

    • public不可继承

    • open可继承

    总结:

    • 没有写访问控制权限关键字时,默认访问权限是internal

    • 访问控制权限从高到低的顺序:open > public > internal > filePrivate > private

      • 1、private:访问级别仅在当前定义的作用域内有效

      • 2、filePrivate:访问限制仅限制在当前定义的源文件中

      • 3、Internal:默认访问级别,允许定义模块中的任意源文件访问,但不能被该模块之外的任何源文件访问

      • 4、public:开放式访问,使我们能够在其定义模块的任何源文件中使用代码,并且可以从另一个源文件访问源文件。但是只能在定义的模块中继承和子类重写

      • 5、open:最不受限制的访问级别,可以在任意地方、任意模块间被继承、定义、重写

    相关文章

      网友评论

          本文标题:Swift-进阶 11:访问控制权限

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