作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
各位程序员...
常量.h
extern NSString * const LOGIN_URL;
常量.m
NSString * const LOGIN_URL = @"http://www.url.com ";
无论如何,我可以将下面的伪代码复制到 Objective C 中吗?
if([[[[NSBundle mainBundle] infoDictionary] objectForKey:@"DebugMode"] boolValue] == NO)
{
NSString * const LOGIN_URL = @"http://www.production-url.com";
}
else
{
NSString * const LOGIN_URL = @"http://www.qa-url.com";
}
最佳答案
您的要求并不完全可行(至少不是您要求的方式)。一个常量是在编译时设置和建立的(严格来说并不正确,但为了解释起见,它会这样做),因此意味着它不能在运行时因任何原因发生变异。
根据调试和发布代码更改常量值的传统方法是通过预处理器。像这样:
#if __DEBUG_MODE__ == 1
NSString * const LOGIN_URL = @"http://www.qa-url.com";
#else
NSString * const LOGIN_URL = @"http://www.production-url.com";
#endif
现在 __DEBUG_MODE__
需要先定义,然后才能执行任何操作,有几种方法可以做到这一点。您可以将以下行添加到您的前缀头文件 (.pch)
#define __DEBUG_MODE__ 1 // Change to 0 to disable debug mode.
或将编译器标志 -M__DEBUG_MODE__=1
添加到您希望生效的文件中。这意味着每当 __DEBUG_MODE__
设置为 1 时,编译器将使用您的调试常量,而当它的值为 0 时,编译器将使用生产常量。
这也有利于将调试代码和生产代码分开(您应该避免在二进制文件中同时使用这两种代码,因为它可能会带来大量问题和安全问题)。
希望这对您有所帮助。
关于ios - iOS 常量文件中的条件 IF/ELSE 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14777142/
我是一名优秀的程序员,十分优秀!