Tag: 私有

私人vs文件私人

文件专用 访问将实体的使用限制为自己定义的源文件。 当在整个文件中使用特定功能的实现细节时,使用文件专用访问权限可以隐藏这些细节。 专用 访问将实体的使用限制为封闭的声明以及该声明在同一文件中的扩展名。 当仅在单个声明中使用特定细节的实现细节时,使用私有访问权限可以隐藏这些细节。 私人的 仅在类及其扩展名中具有私有访问权限(当扩展名位于同一.swift文件中时)。 私人档案 仅在类及其扩展名和子类中提供文件专用访问(当扩展名或子类位于同一.swift文件中时)。 + 同一文件中的子类。 让我们创建一个示例。 我们有3个Controllers类,分别为ViewController,DetailViewController和ScreenViewController。 现在,在ViewController中声明了2个属性,带有private的 testCount和带有fileprivate的newCount。 我们可以在上面的代码中看到。 由于访问控制fileprivate,我们无法访问ScreenViewController中的newCount。 现在,仅在ViewController文件中声明newCount。 如我们所见,由于在同一文件中声明了newCount,因此可以在ScreenViewController中访问它。 现在让我们对testCount做同样的事情。 正如我们在屏幕快照中看到的那样,我们也无法在同一文件中访问testCount。 而我们可以在扩展类UITextFieldDelegate中访问newCount和testCount。 结论:Private和FilePrivate都不能在声明它们的文件外部访问。 唯一的区别是FilePrivate变量可在子类和扩展名中访问,而Private只能在扩展名中访问,而在子类中不可访问。

用私有的Objective-C成员创建Swift框架。 黄金三镖客

我最近正在开发一个封闭源代码Swift框架。 不幸的是,代码的某些部分位于Objective-C中(依赖于纯C库)。 在本文中,我重点介绍了使用混合Swift / ObjC代码的框架时的一些问题。 我展示了一些使ObjC代码内部化时尝试的方法。 使它对于框架用户不可见,但是仍然可以从Swift代码中访问,这让我感到非常头痛。 另外,我也分享了一个最终解决方案。 问题 关于Swift / ObjC互操作性的文章和教程很多,但是很少关注框架目标。 看来,即使您已准备好一切, 也仍然几乎不可能对框架用户有效地隐藏Objective-C部分 (至少只要您希望将其公开给Swift部分即可)。 假设您创建了一个名为MyFramework的框架, 其中包含以下成员: 好的,我的意思是“默认”的Swift ObjC互操作性。 简要回顾一下: 要将Swift暴露给Objective-C : 目标需要定义一个模块 将Swift成员标记为@objc 使Swift成员从NSObject继承 将Objective-C暴露给Swift : 将ObjC导入放置在桥接头文件中(如果可用) 将ObjC导入放置在伞状标题中(对于框架) 你可以在这里读更多关于它的内容: 苹果:将Swift导入Objective-C 苹果:将Objective-C导入Swift Jen Sipila关于Swift互操作性的文章 这种方法存在一个重大问题: “ Swift会 在您的伞形标题中 看到您公开 公开的 每个 标题。 该框架中的Objective-C文件的内容可以从该框架目标内的任何Swift文件中自动获得,而无需导入语句。” 因此,它没有提供所需的行为 。 此外,我注意到,这常常导致一连串的“包括非模块化标头”问题。 从字面上看,您可以重写一半的标头。 只要您不导入控件之外的任何标头,例如某些静态库中的标头,它仍然是可行的。 加起来: 优点: ObjC的预期方式-> Swift互操作性 缺点: 暴露给Swift的所有Objective-C成员也是公开可见的 导入非模块化标头的常见问题 […]