【发布时间】:2015-04-13 18:38:37
【问题描述】:
由于 Swift 无法访问编译变量,我创建了一个指向编译变量的目标 c extern 变量。
CompileVaribleConvertor.h
extern NSString * const NetworkApiBasicAuthUsername;
CompileVaribleConvertor.m
// AUTH_USERNAME might not be defined depending on the environment we are pointing to
#if defined(AUTH_USERNAME)
NSString * const NetworkApiBasicAuthUsername = @AUTH_USERNAME;
#else
NSString * const NetworkApiBasicAuthUsername = nil;
#endif
NetworkManager.swift
if CSNetworkApiAuthUsername != nil {
// Basic auth is required set them
}
这段代码曾经在 Swift 1.0 上工作,但是 Swift 1.2 给出了编译错误。 二元运算符'!='不能应用于'String'和'nil'类型的操作数
如何使 extern 变量成为可选变量,我尝试将 extern 变量定义为 __nullable,但没有成功
【问题讨论】:
-
“由于 Swift 无法访问编译变量” 嗯,这不是真的,是吗?这取决于你想做什么。您可以在方案中设置环境变量并使用 NSProcessInfo 访问其值。并且 Swift 有一个
#if/#else/#endif构造来测试是否定义了某些东西。 -
如果您需要快速解决方案,只需使用空字符串即可。
-
@matt 应该更清楚,我的编译变量在构建设置下存储为“其他 C 标志”,如果我错了,请纠正我,但我相信 NSProcessInfo 无法访问它们。我不想将它们移动到方案设置,所以我最终根据 Sulthan 的建议在我的 if/else 宏中将值设置为空字符串