Как я заметил выше, это, как представляется, be a current limitation with the Swift Package Manager. В настоящее время он не поддерживает добавление соответствующих параметров времени компиляции, таких как те, которые необходимы для поддержки блоков в качестве входных данных для функций GCD (-Xcc -fblocks
).
В то же время вы можете избежать диспетчера пакетов Swift и скомпилировать файлы напрямую с помощью swiftc с соответствующими параметрами. Пример обеспечивается sheffler в their test repository:
swiftc -v -o gcd4 Sources/main.swift -I .build/debug -j8 -Onone -g -Xcc -fblocks -Xcc -F-module-map=Packages/CDispatch-1.0.0/module.modulemap -I Packages/CDispatch-1.0.0 -I /usr/local/include
В -I
вариантах будут тянуть в ваших картах модуля для libdispatch, поэтому настроить те, чтобы соответствовать, где вы на самом деле поместили эти модульные системы каталогов.
Какова карта модуля, которую вы используете, чтобы вытащить libdispatch в Swift? Вы используете диспетчер пакетов? –
Я использую официальный модуль: https://github.com/apple/swift-corelibs-libdispatch да, первый блок кода работает. 'import Dispatch' и' dispatch_queue_create' работают. – zig1375
Это звучит по этой проблеме: https://bugs.swift.org/browse/SR-397, где любая функция libdispatch вызывает необходимость блокировки блоков. Похоже, Менеджер Swift Package Manager должен поддерживать пользовательские флаги компилятора для модулей, чтобы это работало. –