iOS - 使 swift 扩展有选择地可见
iOS - Make swift extension selectively visible
在 swift 中,如何让扩展只对少数 类 可见而不对所有人可见?
我在名为 UIImage+filters.swift
的文件中添加了 UIImage 的扩展。我将仅在我的项目 PhotoImage
和 PhotosViewController
的 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
}
在 swift 中,如何让扩展只对少数 类 可见而不对所有人可见?
我在名为 UIImage+filters.swift
的文件中添加了 UIImage 的扩展。我将仅在我的项目 PhotoImage
和 PhotosViewController
的 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
}