Swift的访问修饰符有:open、public、internal、fileprivate、private,此5个修饰符访问权限依次由高至低
open
可以在定义的模块中使用也可以在外部模块中使用,都可重写与继承,项目target相当于是模块,open只能用在类&类成员上
public
可以在定义的模块中使用也可以在外部模块中使用,但是外部模块不能重写与继承
internal
只允许在定义的模块中使用,外部模块不能使用,可隐藏文件的实现
fileprivate
只允许在定义的源文件中使用,即源文件.swift文件中使用,即使是extension中使用fileprivate修饰,未在一个源文件也不能使用
private
只允许在定义的封闭声明中访问,即你所定义的类,值类型的实现中
未指定访问修饰符的默认internal
使用规则
除了public被修饰的实体若是内部的属性或函数未指定修饰符,即内部所有默认修饰为修饰实体的修饰符,public的类型默认拥有internal级别的成员,而不是 public,不能使用低访问级别来定义高访问ji,函数的访问级别不能高于其参数类型和返回值类型,也知枚举中定义中的原始值和关联值使用的访问级别也需要不低于本枚举。
如这样:
private struct Student {
}
public struct Person {
public var student:Student
}
编译器会报错Property cannot be declared public because its type uses a private type
private struct Student {
var grade: String = ""
var learningDirection: String = ""
}
struct Person {
public func study(with student:Student) {
print(student.grade,student.learningDirection)
}
public func back() -> Student {
return Student()
}
}
编译器会报错Method cannot be declared public because its parameter uses a private type
struct Success {
var data:Data?
}
struct Fail {
var code:Int?
var msg:String?
}
public enum Result {
case success(Success)
case fail(Fail)
}
编译器会报错Enum case in a public enum uses an internal type
网友评论