swift中的权限控制
2018-05-15 本文已影响0人
陈藩
swift 中的三种权限
private 私有的
在哪里写的,就在哪里用。无论是类,变量,常量还是函数,一旦被标记为私有的,就只能在定义他们的源文件里使用,不能为别的文件所用。可以用来隐藏某些功能的细节实现方式。
internal 内部的
标记为internal的代码块,在整个应用(App bundle)或者框架(framework)的范围内都是可以访问的。
public 公开的
标记为public的代码块一般用来建立API,这是最开放的权限,使得任何人只要导入这个模块,都可以访问使用。
swift里面所有的代码实体的默认权限都是internal。
除了可以给整个声明设置权限,swift还允许在需要的时候,把某个属性的取值权限比赋值权限设置的更加开放。
eg:
public class ListItem {
// ListItem这个类,有两个公开的属性
public var text: String
public var isComplete: Bool
// 下面的代码表示把变量UUID的赋值权限设为private,对整个app可读,但值只能在本文件里写入
private(set) var UUID: NSUUID
public init(text: String, completed: Bool, UUID: NSUUID) {
self.text = text
self.isComplete = completed
self.UUID = UUID
}
// 这段没有特别标记权限,因此属于默认的internal级别。在框架目标内可用,但对于其他目标不可用
func refreshIdentity() {
self.UUID = NSUUID()
}
public override func isEqual(object: AnyObject?) -> Bool {
if let item = object as? ListItem {
return self.UUID == item.UUID
}
return false
}
当使用Objective-C 和swift混合开发时,需要注意的是:
1.如果再写的是一个应用,Xcode会生成一个头文件来保证两者的可互访行,而这个生成的头文件会包含public和internal级别的声明
2.如果你的最终产品是一个swift框架,头文件里只会出现标记为public级别的声明(因为框架的头文件属于公开的Objective-C接口的一部分,只有public部分对于Objective-C可用)。