gpt4 book ai didi

ios - iOS 常量文件中的条件 IF/ELSE 语句

转载 作者:行者123 更新时间:2023-11-28 18:38:30 26 4
gpt4 key购买 nike

各位程序员...

  • 我在应用程序的全局常量文件 中设置了服务器 url。
  • 我的应用程序 plist 中还有一个名为 “DebugMode” 的变量,一旦切换,应用程序将使用的 url 就会发生变化。

常量.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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com