【问题标题】:iOS - Make swift extension selectively visibleiOS - 使 swift 扩展有选择地可见
【发布时间】:2016-09-02 00:55:05
【问题描述】:

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

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

【问题讨论】:

  • 类扩展的重点是为该类的所有实例扩展该类。听起来您的功能非常具体,因此更适合辅助类。

标签: ios swift class-extensions


【解决方案1】:

这是不可能的,类/扩展的访问修饰符在所有单元中表现一致,将外部模块和它们所在的模块之间的权限分开。这意味着您可以声明您的类/扩展在您的应用程序/模块中是可访问的,并且不能被外部人员访问或对所有人可见。

Swift3 带有一个新的访问修饰符,但没有限制模块/应用程序内部的部分访问。

【讨论】:

    【解决方案2】:

    Swift 中没有“朋友”类的概念。但是您可以通过在扩展程序中使用 private 来破解它。为此,扩展类和您的 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
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-01
      • 2019-03-07
      • 1970-01-01
      • 2011-10-29
      • 2017-03-10
      相关资源
      最近更新 更多