在某些时候,我们可能试图查看apple为ios开发提供的程序包/库的代码。例如:UIViewController,SFSafariViewController等。当我们进入这些包/库的文件时,我们会发现类似的东西。
extension UIViewController {
@available(iOS 5.0, *)
open var children: [UIViewController] { get }
@available(iOS 5.0, *)
open func addChild(_ childController: UIViewController)
@available(iOS 5.0, *)
open func removeFromParent()
@available(iOS 5.0, *)
open func transition(from fromViewController: UIViewController, to toViewController: UIViewController, duration: TimeInterval, options: UIView.AnimationOptions = [], animations: (() -> Void)?, completion: ((Bool) -> Void)? = nil)
@available(iOS 7.0, *)
open var childForStatusBarStyle: UIViewController? { get }
@available(iOS 7.0, *)
open var childForStatusBarHidden: UIViewController? { get }
}
这只是该文件包含的内容的一部分。但这仅仅是一个方法签名,这些方法在其实现中具有更多功能,对用户访问而言是隐藏的。
我的问题是
这怎么可能?我们如何隐藏或仅向用户提供 使用和休息的功能签名对用户而言是隐藏的?
答案 0 :(得分:1)
UIKit 是一个框架,因此具有访问控制
来自 docs.swift.org
访问控制限制访问代码中的部分代码 其他源文件和模块。此功能使您可以隐藏 您的代码的实现细节,并指定首选 通过该接口可以访问和使用该代码。
您可以使用访问控制
将框架添加到项目中在 docs.swift.org 中的Swift访问控制中:
开放访问和公共访问使实体可以在其定义模块的任何源文件中使用,也可以在源文件中使用 从另一个模块中导入定义模块。你通常 在指定公共接口时使用公开或公共访问 框架。描述了开放访问与公共访问之间的区别 在下面。
内部访问权限使实体可以在其定义模块的任何源文件中使用,但不能在该模块之外的任何源文件中使用 模块。通常,在定义应用或 框架的内部结构。
文件专用访问权限将实体的使用限制为自己定义的源文件。使用文件专用访问权限隐藏 特定功能的实现细节 详细信息用于整个文件。
私有访问权限将实体的使用限制为封闭的声明以及该声明在扩展名中的扩展名。 同一文件。使用私有访问权限来隐藏 仅使用那些细节时的特定功能 在一个声明中。