2016-07-21 3 views
5

В Objective-C, у меня есть что-то вроде:__has_include проверить, существует ли класс против swift?

#if __has_include(<MyFramework/SomeFeature.h>) 
SomeFeature *h = [SomeFeature new] 
#else 
OtherFeature *h = [OtherFeature new] 
#endif 

Как мы можем проверить, если в стрижа класс существует? У этой ссылки есть какой-то ответ Weak Linking - check if a class exists and use that class

Хорошая вещь о __has_include заключается в том, что это проверка времени компиляции, но она работает только для заголовка цели-c. У нас есть что-то для быстрого? Или, может быть, то, что я делаю, не очень хороший подход?

К примеру, у меня есть класс Machine и имеет метод Gun, если я включил Pistol рамки, он будет возвращать Pistol. Если бы я включил оба Pistol и AK47, он вернет AK47, потому что у него больше пуль.

+0

Swift 4.1 поставляется с новой проверкой 'canImport'. [Предложение] (https://github.com/apple/swift-evolution/blob/master/proposals/0075-import-test.md) – execv

ответ

0

Проверка времени компиляции по-прежнему доступна в Swift, но они намного менее надежны. Чтобы выполнить проверку времени компиляции, вам необходимо определить compilation condition и установить несколько новых build configurations, которые могут включать или отключать условия. У Swift нет препроцессора (пока?), Так что это объем ваших возможностей.