Swift 1.2可选外部变量?

由于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而没有运气

我刚做了一些快速测试,我很确定这是一个bug。 没有办法强制全局变量(或常量)成为选项。 即使它们被初始化nil 。 这不可能是正确的。

宏与bug无关。 作为解决方法,您可以使用函数而不是常量:

 NSString* NetworkApiBasicAuthUsername() { #if defined(AUTH_USERNAME) return @AUTH_USERNAME; #else return nil; #endif }