在Objective-C中,我在构建设置->代码中使用的其他C标志中设置了一堆编译器标志。例如:
标志=> -DPortNumber = 1
在代码中,我能够通过 @(PortNumber)
这在Swift中不起作用,而且我找不到答案。
-D
C编译器的标志定义了预处理器宏。Swift中没有预处理器宏。因此,如果您要执行以下操作:
// compile with -DPORT_NUMBER 31337
var port = PORT_NUMBER // error
…你不能。Swift旨在使源代码在编译之前在语法上完整。如果您可以在构建时关闭其中的某些块,则可能会破坏工具链的功能,以帮助验证代码是否正确。(部分原因是因为C中的预处理器宏是文本替换的:您可以使用它们来重写语言的任何部分,而不仅仅是填写变量的值。)
Swift编译器确实有一个-D
标志,但是其使用受到更多限制:您只能将其用于构建配置。因此,如果您想执行以下操作,那将很酷:
// compile with -DUSE_STAGING_SERVER
#if USE_STAGING_SERVER
var port = 31337
#else
var port = 80
#endif
请注意,与C不同,#if
块内的所有内容都必须在语法上完整。(例如,您不能仅将a的声明行func
放在#if
块中,而将函数主体保留在条件语句之外。)
当然,如果要在代码中使用编译时设置的配置 值
,这对您没有帮助。为此,我建议使用其他方法。Xcode仍然可以在资源文件(例如属性列表)中进行文本替换。(请注意,应用程序随附的Info.plist充满了诸如之类的东西$(TARGET_NAME)
。)因此,您可以在应用程序中包含捆绑资源,其内容将根据项目设置在编译时填充,然后读取端口从那开始
问题内容: 我有一个使用Xcode 10.3构建的VoiceSampler.framework 我正在尝试在新项目的Xcode11中使用该框架。我已经成功添加了该框架,但是当我用AppDelegate 编写时,出现以下错误: 使用Swift 5.0.1编译的模块无法由Swift 5.1编译器导入:/Users/apple/Projects/CaptureAppSwift/VoiceSampler.
问题内容: 我正在尝试按照指令https://github.com/Paytm- Payments/Paytm_iOS_App_Kit/tree/master/Swift/BitCodeDisabled/PaytmNativeSDK将 第三方应用程序集成到项目中 我在构建中看到以下错误 Swift 5.0编译器无法导入使用Swift 4.2.1编译的模块 我尝试了工具链https://medium
我已经下载了Xcode 8.0测试版,其中包括更新的Swift 3编译器。是否可以在终端上使用Swift 3编译器? 例如,我可以使用“Swift(filename)”命令在终端中编译和运行Swift 2.2代码。
问题内容: 我有一个框架(在本例中为RxSwift),已使用Xcode 11.0将其编译为传统样式包 这很好地导入了Xcode 11.0和11.1,从没有任何问题 今天,在Apple发布Xcode 11.2时,我进行了升级,并看到以下错误: 使用Swift 5.1编译的模块不能由Swift 5.1.2编译器导入 我曾经习惯过快速编译器不匹配,而且我知道我可以使用Xcode 11.2重新编译RxSw
使用命令行编译器 注解 这一节并不适用于 solcjs solc 是 Solidity 源码库的构建目标之一,它是 Solidity 的命令行编译器。你可使用 solc --help 命令来查看它的所有选项的解释。该编译器可以生成各种输出,范围从简单的二进制文件、汇编文件到用于估计“gas”使用情况的抽象语法树(解析树)。如果你只想编译一个文件,你可以运行 solc --bin sourceFil
工具链介绍 gxnpuc 用于把模型文件编译成能在 NPU 上运行的 npu 文件。 usage: gxnpuc [-h] [-V] [-L] [-v] [-m] [-c CMD [CMD ...]] [config_filename] NPU Compiler positional arguments: config_filename config file optiona