Swift之访问控制

前置知识:模块和源文件

模块

独立的单元构建和发布单位,实现某个特定功能的代码集合
创建的一个项目就是一个模块
import 导入别人的模块(本质是别人写好的项目,直接拿过来用),演示查看UIKIT源代码,导入了很多模块
注意:模块不是目录,更不是文件夹,而是某个功能的集合,比如UIKit、第三方框架(snapkit)等

源文件

是一个模块中的单个 Swift 源代码文件。

访问权限

访问权限可以修饰 类、方法、属性等。

  • open 和 public :允许实体被自己定义的模块中的任意源文件访问,也可以被另一模块的源文件通过导入该定义模块来访问。在指定框架的公共接口时,通常使用 open 或 public。
    【演示】查看UIKIT源代码,里面的方法几乎都是public
  • internal:——不能出模块(项目)
    允许实体被定义模块中的任意源文件访问,但不能被该模块之外的任何源文件访问。通常在定义应用程序或是框架的内部结构时使用。(默认级别)
    【演示】随便创建一个类SecVC,可以在ViewController中访问到。
  • fileprivate——不能出当前源文件
    将实体的使用限制于当前定义源文件中。

【演示】

//1、新定义一个Woker类,其中fileprivate修饰的name,在另一个文件VC中无法访问
   class Worker{  
         fileprivate var name:String
         override init() {
             self.salary = 6000
             self.name = "miao"
         }
     }
//2、在woker类的源文件中新定义一个Company类,可以访问name属性
       class Company{
           var mishu:Worker
           init(mishu:Worker) {
               self.mishu = mishu
           }
           func printInfo(){
               print(mishu.name)  //可访问name
           }
       }
  • private : ——不能出当前作用域
    将实体的使用限制于封闭声明中,比fileprivate更严格。

【演示】

//在woker类的新增属性salary,同文件Company类中也访问不了
   class Worker: {
       
       fileprivate var name:String
       private var salary:Int
       init() {
           self.salary = 6000
           self.name = "miao"
       }
   }

   class Company{
       var mishu:Worker
       init(mishu:Worker) {
           self.mishu = mishu
       }
       func printInfo(){
           print(mishu.name)  //可访问name
           //print(mishu.salary)  //不可访问salary
       }
   }

访问原则

Swift 中的访问级别遵循一个基本原则:实体不能定义在具有更低访问级别(更严格)的实体中。
例如:

  • 一个 public 的变量,其类型的访问级别不能是 internal,fileprivate 或是 private。因为无法保证变量的类型在使用变量的地方也具有访问权限。
  • 函数的访问级别不能高于它的参数类型和返回类型的访问级别。因为这样就会出现函数可以在任何地方被访问,但是它的参数类型和返回类型却不可以的情况。
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本章将会介绍 模块和源文件访问级别访问控制语法自定义类型子类常量、变量、属性、下标构造器协议扩展泛型类型别名位运算...
    寒桥阅读 4,455评论 0 2
  • 中文文档 一、模块和源文件 Swift 中的访问控制模型基于模块和源文件这两个概念。 模块指的是独立的代码单元,框...
    伯wen阅读 2,540评论 0 0
  • 访问控制可以限定其它源文件或模块中的代码对你的代码的访问级别。这个特性可以让我们隐藏代码的一些实现细节,并且可以为...
    Sultan阅读 1,252评论 0 0
  • 案例代码下载 访问控制 访问控制限制从其他源文件和模块中的代码访问部分代码。此功能使可以隐藏代码的实现细节,并指定...
    酒茶白开水阅读 3,008评论 0 0
  • 【成为更好的自己】2016年记录( day1) 此时此刻坐在波兹南的家里写下这些文字,距离去年离开波兹南,刚好一年...
    阿果MePlus阅读 3,704评论 0 1

友情链接更多精彩内容