iOS - сделать расширение Swift выборочно видимым

В swift, как сделать расширение видимым только для нескольких классов, а не для всех?

Я добавил расширение для UIImage в файл с именем UIImage+filters.swift, Я буду использовать это расширение только в 2 классах в моем проекте PhotoImage а также PhotosViewController, Я хочу, чтобы расширение было видно только для этих 2 классов. Как мне этого добиться?

2 ответа

Решение

Это невозможно, модификаторы доступа классов / расширений ведут себя согласованно во всех модулях, разделяя привилегии между внешними модулями и модулем, в котором они находятся. Это означает, что вы можете объявить ваш класс / расширение доступным внутри вашего приложения / модуля и недоступным для посторонних или видимым для всех.

Swift3 поставляется с новым модификатором доступа, но ничего, чтобы частично ограничить доступ внутри модуля / приложения.

В Swift нет понятия "дружеских" классов. Но вы можете взломать свой путь через это, используя private в своем расширении. Чтобы это работало, класс расширения и ваш PhotoImage и PhotosViewController должны быть в одном файле. Используя private в расширении UIImage, добавленная функция видна только в этом файле и не будет видна в других файлах.

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
}
Другие вопросы по тегам