Swift 权限控制
在Swift语言中,最早是没有相关的对象权限控制的,这也是被人诟病的一个原因。而现在Swift中,现在已经有了非常灵活的权限控制。
为什么要有权限
为什么要权限控制,就是因为我们的程序里,不同的对象或是属性,可能希望不同暴露给不同的接口出去,比如我们要做一个Framework,我们只希望我们的接口暴露出去,而不是把内部的变量或者实现方法暴露,所以我们就只希望我们的接口方法是Public的,而其他的只是private的。我们就可以指定元素的是否对其他元素可见。这只是简单的一个例子,在swift中我们可以指定更加细粒度的权限控制。在其他语言中,比如Java,是在每个方法和属性前面定义我们的访问权限的。
权限控制类型
在介绍权限以前,首先要明确两个概念,模块和源文件。模块指的是我们把一个发布出的一组代码。例如我们的Foundation Framework, 而源文件就是指的当前文件。而我们有三种控制类型,public, internal, private.这三种类型就是基于这两个概念的。
public: 我们的这个实体对模块中的所有文件和引用模块中的所有文件可见。
internal: 我们的这个实体只对模块里的文件可见。这个是默认的控制类型,如果不指定关键字就是这个。
private: 我们的实体只对我们的源文件中可见。
如何使用
我们举个栗子来看,例如我们有个公司类,里面有两个属性,我们需要将我们的属性isBigCompany作为private
class Company {
var employeeNumber = 2000
private var isBigCompany = false
}
这个没有什么好说的,那如果我们的想让我们的属性是只有在此文件中是可见的,其他地方对于这个属性是只读的,而不能写,怎么办呢?我们可以使用如下的方法:
class Company {
var employeeNumber = 2000
internal private(set) var isBigCompany = false
}
表示了我们的这个的get的时候是internal, 在set的时候是private,所以在文件外部是无法进行修改的,只能在本文件中访问。因为我们的默认的可见性就是internal,所以可以简化写为:
class Company {
var employeeNumber = 2000
private(set) var isBigCompany = false
}
如果有什么问题,请和我联系,微信公众账号 - 马哥水果派。
personal wechat public
网友评论