iOS开发-Swift进阶之访问控制权限!
Posted iOS大鑫
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS开发-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报错提示
报错的主要原因是t
在main.swift
文件中的默认权限是Internal
,只能在同一个模块内使用,其属于Foundation
模块,而custom.swift
文件中不能调用t,是因为其属于AppKit
模块,与Foundation
并不是同一个模块,所以不能访问
public
public
:开放式访问,使我们能够在其定义模块的任何源文件中使用代码,并且可以从另一个源文件访问源文件。但是只能在定义的模块中继承和子类重写
open
open
:最不受限制的访问级别,可以在任意地方、任意模块间被继承、定义、重写
public与open的区别:
-
public不可继承
-
open可继承
总结:
作为一个开发者,有一个学习的氛围跟一个交流圈子特别重要,这是一个我的ios开发交流群:130 595 548,不管你是小白还是大牛都欢迎入驻 ,让我们一起进步,共同发展!(群内会免费提供一些群主收藏的免费学习书籍资料以及整理好的几百道面试题和答案文档!)
-
没有写访问控制权限关键字时,
默认
的访问权限是internal
-
访问控制权限
从高到低
的顺序:open > public > internal > filePrivate > private
-
1、
private
:访问级别仅在当前定义的作用域内有效
-
2、
filePrivate
:访问限制仅限制在当前定义的源文件中
-
3、
Internal
:默认访问级别,允许定义模块中的任意源文件访问,但不能被该模块之外的任何源文件访问 -
4、
public
:开放式访问,使我们能够在其定义模块的任何源文件中使用代码,并且可以从另一个源文件访问源文件。但是只能在定义的模块中继承和子类重写
-
5、
open
:最不受限制的访问级别,可以在任意地方、任意模块间被继承、定义、重写
以上是关于iOS开发-Swift进阶之访问控制权限!的主要内容,如果未能解决你的问题,请参考以下文章