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
}