5

我编译了libdispatch。此代码有效:

import Dispatch
var lockQueue = dispatch_queue_create("com.test.async", nil);

但是,如果我将此代码放在结束文件中:

dispatch_async(lockQueue) {
    print("test1");
}

我收到一个错误:

使用未解析的标识符“dispatch_async”

4

1 回答 1

3

正如我上面评论的,这似乎是Swift Package Manager 当前的限制。它目前不支持添加适当的编译时选项,例如支持将块作为 GCD 函数的输入所需的选项 ( -Xcc -fblocks)。

同时,您可以避免使用 Swift 包管理器并使用 swiftc 直接编译您的文件,并使用适当的选项。sheffler 在他们的测试存储库中提供了一个示例:

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,因此请调整它们以匹配您实际放置这些系统模块目录的位置。

于 2016-01-08T16:36:39.547 回答