Swift 1.2可选外部变量?

时间:2015-04-13 18:38:38

标签: ios swift

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

1 个答案:

答案 0 :(得分:1)

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

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

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