由于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
但没有运气
答案 0 :(得分:1)
我刚做了一些快速测试,我很确定这是一个错误。没有办法强制全局变量(或常量)成为可选项。即使它们使用nil
初始化。这不可能是正确的。
宏与bug没有关联。 作为解决方法,您可以使用函数而不是常量:
NSString* NetworkApiBasicAuthUsername() {
#if defined(AUTH_USERNAME)
return @AUTH_USERNAME;
#else
return nil;
#endif
}