iOS - 使 swift 扩展有选择地可见

iOS - Make swift extension selectively visible

在 swift 中,如何让扩展只对少数 类 可见而不对所有人可见?

我在名为 UIImage+filters.swift 的文件中添加了 UIImage 的扩展。我将仅在我的项目 PhotoImagePhotosViewController 的 2 类 中使用此扩展。我希望扩展只对这 2 类 可见。我怎样才能做到这一点?

那是不可能的,classes/extensions 的访问修饰符在所有单元中表现一致,将外部模块和它们所在的模块之间的权限分开。这意味着您可以声明您的 class/extension 在您的 app/module 内部是可访问的,并且对外人不可访问或对所有人可见。

Swift3 带有一个新的访问修饰符,但在 module/app.

内部没有限制访问的部分内容

Swift中没有"friend"class的概念。但是你可以通过在你的扩展中使用 private 来破解它。为此,扩展名 class 和您的 PhotoImage 和 PhotosViewController 必须在一个文件中。通过在您的 UIImage 扩展中使用 private,添加的功能仅在此文件中可见,而不会在其他文件中可见。

PhotosViewController.swift

private extension UIImage
{
  func applyFilter()
  {
  }
}


class PhotosViewController : UIViewController
{
  // applyFilter function in visible in this class
} 

AnotherViewController.swift

class PhotosViewController : UIViewController
{
  // applyFilter function in NOT visible in this class
}