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. Надеюсь это поможет.

Другие вопросы по тегам