美文网首页swift 学习进阶
Swift进阶:访问控制权限

Swift进阶:访问控制权限

作者: 欧德尔丶胡 | 来源:发表于2021-03-05 14:11 被阅读0次

swift 进阶之路:学习大纲

本文转载:Style_月月https://www.jianshu.com/p/ead7e3351441

主要介绍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-->

image

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

image
  • 需要使用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)

image

报错的主要原因是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进阶:访问控制权限

    swift 进阶之路:学习大纲[https://www.jianshu.com/p/115367c3eefd] 本...

  • Swift 访问控制 ⑭

    1. 访问控制权限 在访问权限控制这块,Swift提供了5个不同的访问控制级别(以下是从高到低排列,实体指被访问级...

  • 十六、访问控制

    访问控制 访问控制 在访问权限控制这块,Swift提供了5个不同的访问级别(以下从高到低排列) open:允许在定...

  • iOS-Swift-访问控制

    1. 访问控制(Access Control) 在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高...

  • [Swift5.1] 19-访问控制

    访问控制(Access Control) 在访问权限控制这块,Swift提供了5个不同的访问级别:(以下是从高到低...

  • 第二十三节 Swift 的访问控制

    通过访问控制可以限定其它模块的代码对你代码的访问权限。 Swift 常用三种访问权限: Public:可以访问当前...

  • Swift-OOP-权限控制

    访问控制(Access Control) 在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排...

  • Swift进阶(十六)访问控制

    访问控制(Access Control) 在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排...

  • swift 访问权限

    访问控制(Access Control) 在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排...

  • 18-访问控制

    访问控制(Access Control) 在访问权限控制这块,Swift提供了5个不同的访问级别(以下是从高到低排...

网友评论

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

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