【问题标题】:How does swift library hide its implementationswift库如何隐藏它的实现
【发布时间】:2019-07-19 05:56:45
【问题描述】:

在某个时间点,我们可能会尝试查看苹果为 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 }

}

它只是该文件所包含内容的一部分。但这只是一个方法签名,这些方法在其实现中还有更多内容,对用户访问是隐藏的。

我的问题是

这怎么可能?我们如何才能隐藏或仅向用户提供 使用和休息的功能签名隐藏在用户的眼睛之外?

【问题讨论】:

  • 使用框架或静态库,iOS是由框架构建的,我昨天不是告诉过你,并提供了教程链接吗?
  • 那东西对我没有帮助。所有这些都已经由我完成了。我正在寻找别的东西。可能是我自己不清楚,或者我无法让别人理解。
  • 我认为框架或库是您正在寻找的。它隐藏了实现,但显示了方法签名。反正我觉得没有其他选择了,要么共享代码,要么共享框架,要么共享静态库
  • 我只创建了框架。但是,当我在项目中添加该 pod 时,我可以看到我的 pod 库中存在的所有单个文件。我正在使用可可豆荚。而且因为该文件是可见的,所以我可以看到整个代码。
  • 那么不要在 pod 中发布您的源代码,这些 pod 用于开源软件,通常从 git 签出整个项目。你不希望不提供带有源代码的 pod??

标签: ios swift


【解决方案1】:

UIKit 是一个框架,因此它具有访问控制

来自 docs.swift.org

访问控制限制从 其他源文件和模块。此功能使您可以隐藏 您的代码的实现细节,并指定一个首选 可以通过该接口访问和使用该代码。

您可以使用访问控制

将框架添加到您的项目中

Access Control document

Swift standard library

docs.swift.org 的 Swift 访问控制中:

开放访问和公共访问使实体可以在其定义模块的任何源文件中使用,也可以在源文件中使用 从另一个导入定义模块的模块。你通常 指定公共接口时使用开放或公共访问 框架。描述了开放访问和公共访问之间的区别 下面。

内部访问使实体可以在其定义模块的任何源文件中使用,但不能在该模块之外的任何源文件中使用 模块。在定义应用程序或 框架的内部结构。

文件私有访问将实体的使用限制在其自己的定义源文件中。使用文件私有访问隐藏 特定功能的实现细节,当那些 详细信息在整个文件中使用。

私有访问将实体的使用限制为封闭声明,以及该声明在 同一个文件。使用私有访问隐藏 a 的实现细节 仅使用这些细节时的特定功能 在一个声明中。

【讨论】:

  • 在第一行写的是“代码中的代码”,这意味着您可以访问该文件并查看这些实现
  • 是的,Xcode 只显示公共方法。如果您编写一个框架并设置您的公共方法,他们会看到您唯一的公共方法,例如如何实现。您可以设置私有扩展或公共扩展
  • 但最后这只会隐藏您的 swift 文件中的访问权限。
  • 如果你使用编译框架,你不能访问swift文件
猜你喜欢
  • 2017-01-09
  • 1970-01-01
  • 1970-01-01
  • 2018-07-19
  • 2021-06-02
  • 2015-12-03
  • 1970-01-01
  • 2023-03-06
  • 1970-01-01
相关资源
最近更新 更多