2016-09-02 5 views
0

В быстром, как мне сделать расширение видимым только для нескольких классов, а не для всех?iOS - Сделать быстрое расширение выборочно видимым

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

+0

Точка расширения класса является расширить класс для всех экземпляров этого класса. Похоже, ваша функциональность очень специфична и, следовательно, более подходит для вспомогательного класса. –

ответ

0

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

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

0

В Swift нет понятия классов «друг». Но вы можете взломать свой путь через него, используя частные в своем расширении. Чтобы это работало, класс расширения и ваш 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 
}