我已在我的项目中成功配置了3个不同的环境。我试图根据方案中设置的配置来加入基本URL。
如何访问名为' BASE_URL'的变量?来自下面的代码,如
AppConstants.API.BASE_URL
class AppConstants
{
struct API
{
#if ENV_DEV
static let BASE_URL = "http://api_dev .../"
#endif
#if ENV_STAGE
static let BASE_URL = "http://api_stag .../"
#endif
#if ENV_PROD
static let BASE_URL = "https://api_prod .../"
#endif
}
}
我知道这可以完成,因为我可以在其他项目中以这种方式访问:
更新:
更新2:
我已在活动的编辑条件中将环境变量设置为:
我想我错过了一些东西,可能是在构建环境中。
答案 0 :(得分:1)
刚刚测试了以下代码,它应该可以工作。您基本上需要将其从所有#if
转换为使用#elseif
和#else
。这是因为如果没有一个陈述是真的,BASE_URL
可能会存在。{/ p>
您还可以设置默认值并在每个if
语句中进行更改。但不知何故,如果if
语句都不成立,你需要定义变量。
class AppConstants
{
struct API
{
#if ENV_DEV
static let BASE_URL = "http://api_dev .../"
#elseif ENV_STAGE
static let BASE_URL = "http://api_stag .../"
#else
static let BASE_URL = "https://api_prod .../"
#endif
}
}
print(AppConstants.API.BASE_URL)
请记住,如果if语句不为true,此解决方案将默认为最后一个基本URL。在原始问题中没有默认值。如果此行为可接受,则取决于您的配置。
答案 1 :(得分:0)
为了保护自己不设置正确的编译标志,你可以使用类似的东西:
class AppConstants
{
struct API
{
static let BASE_URL: URL = { () -> URL in // URL should be URL
let baseURLString: String
#if ENV_DEV
baseURLString = "http://api_dev .../"
#endif
#if ENV_STAGE
baseURLString = "http://api_stag .../"
#endif
#if ENV_PROD
baseURLString = "https://api_prod .../"
#endif
return URL(string: baseURLString)! // If no proper flag is set, you will get error here
}()
}
}
这里,如果没有设置任何标志,你将收到错误。
如果您设置多个标记,就像原始代码一样,它会不断出现错误。