Swift - как я могу убедиться, что класс скомпилирован, даже если он не используется? - PullRequest
1 голос
/ 23 марта 2020

Моя настройка следующая: у меня есть цель приложения App с пользовательским классом Foo, который используется в параметре протокола, который используется для связи через XP C. AppDelegate для App реализует этот протокол, например:

@objc(Foo) class Foo { ... }

protocol XPCProtocol {
   func myFunc(foo: Foo)
}

class AppDelegate: NSApplicationDelegate, XPCProtocol {
   ...
   func myFunc(foo: Foo) { ... }
}

В моем случае myFunc никогда не вызывается из цели моего приложения App, но другим процессом через XP C. Однако, похоже, что App никогда не вызывает его, и это единственное использование Foo, класс Foo, кажется, не компилируется (всякий раз, когда я вызываю myFunc из другого процесса, он говорит, что Foo не загружен или не существует).

Еще одним свидетельством того, что это проблема компиляции, является тот факт, что если я просто создаю экземпляр Foo где-нибудь в App через let _ = Foo(), проблема исчезнет прочь. Однако я действительно предпочел бы избежать решения проблемы с компилятором таким образом.

Итак, есть ли способ пометить мой класс Foo, чтобы компилятор всегда включал его? У меня уже отключена оптимизация компилятора Swift в моих настройках сборки XCode, поэтому я не уверен, что еще я могу сделать.

...