Swift 3 Как управлять разными делегатами для разных целей
Мы создали две цели (Target_One & Target_Two) для одного проекта.
- Target_One содержит SDK1 и делегирует Target1SDKHelperDelegate
- Target_Two содержит SDK2 и делегирует Target2SDKHelperDelegate
Причина создания двух целей: нам нужно загрузить два приложения с одинаковым пользовательским интерфейсом, но разной интеграцией SDK.
Как известно, у каждого SDK есть свои делегаты. Поэтому мы хотим применить делегатов, специфичных для цели.
Пример: Target_One имеет класс с именем MyClass
class MyClass: NSObject, Target1SDKHelperDelegate {
}
В вышеприведенном классе мы реализовали делегат Target1SDKHelperDelegate. Мы также используем тот же класс для Target_Two и хотим использовать Target2SDKHelperDelegate для Target_Two.
Итак, как мы можем разместить двух разных делегатов для двух разных целей?
Мы также знаем, что для управления целью мы должны использовать приведенный ниже код.
#if Target_One
#else
#endif
Но кто-нибудь скажет нам, как управлять делегатом с помощью выше?
Мы хотим сделать что-то вроде:
class MyClass: NSObject
#if Target_One
, Target1SDKHelperDelegate
#else
, Target2SDKHelperDelegate
#endif
{
}
2 ответа
Можно попробовать как этот код с использованием typealias:
#if FREE_VERSION
public typealias DELEGATES = UIViewController & AttributeUDBClientMainDelegate & AttributeSubscriptionHelperDelegate
#else
public typealias DELEGATES = UIViewController
#endif
public final class SettingsViewController: DELEGATES {
На самом деле это довольно просто и прямо. В последнее время я столкнулся с проблемой, потому что размер iPA стал слишком большим, как 20 МБ. Я отключил ненужные функции в некоторых целях и должен был управлять общими файлами, такими как Appdelegate, когда он имеет ссылки на отключенные файлы функций. Решил это, просто продублировав файл Appdelegate и поместив его в определенные пути, связанные с конкретными целями. Затем включил каждый файл appDelegate под своей целью. Это сработало. Идея такая же, как если бы у вас были файлы конфигурации push-уведомлений firebase pLists для нескольких целей ИЛИ папок imageAssets. Надеюсь это поможет.