JoJ*_*oJo 110 cocoa-touch global constants objective-c ios
我的iOS应用程序中的大多数模型都在查询Web服务器.我想有一个配置文件存储服务器的基本URL.它看起来像这样:
// production
// static NSString* const baseUrl = "http://website.com/"
// testing
static NSString* const baseUrl = "http://192.168.0.123/"
Run Code Online (Sandbox Code Playgroud)
通过注释掉一行或另一行,我可以立即更改模型指向的服务器.我的问题是,在iOS中存储全局常量的最佳实践是什么?在Android编程中,我们有这个内置的字符串资源文件.在任何Activity(相当于UIViewController)中,我们可以使用以下命令检索这些字符串常量:
String string = this.getString(R.string.someConstant);
Run Code Online (Sandbox Code Playgroud)
我想知道iOS SDK是否有类似的存储常量的地方.如果没有,Objective-C中的最佳做法是什么?
jus*_*tin 167
好吧,你想要它所涉及的接口的本地声明 - 应用程序范围的常量文件不是一件好事.
同样,最好简单地声明一个extern NSString* const
符号,而不是使用#define
:
SomeFile.h
extern NSString* const MONAppsBaseUrl;
Run Code Online (Sandbox Code Playgroud)
SomeFile.m
#import "SomeFile.h"
#ifdef DEBUG
NSString* const MONAppsBaseUrl = @"http://192.168.0.123/";
#else
NSString* const MONAppsBaseUrl = @"http://website.com/";
#endif
Run Code Online (Sandbox Code Playgroud)
除了省略C++兼容的Extern声明之外,这通常会在Apple的Obj-C框架中使用.
如果只需要一个文件或函数可以看到常量,那么static NSString* const baseUrl
就可以了*.m
.
Cyr*_*lle 146
你也可以做一个
#define kBaseURL @"http://192.168.0.123/"
Run Code Online (Sandbox Code Playgroud)
在"常量"头文件中,比方说constants.h
.然后做
#include "constants.h"
Run Code Online (Sandbox Code Playgroud)
在每个需要此常量的文件的顶部.
这样,您可以根据编译器标志在服务器之间切换,如下所示:
#ifdef DEBUG
#define kBaseURL @"http://192.168.0.123/"
#else
#define kBaseURL @"http://myproductionserver.com/"
#endif
Run Code Online (Sandbox Code Playgroud)
Pio*_*sik 39
我定义全局常量的方式:
AppConstants.h
extern NSString* const kAppBaseURL;
Run Code Online (Sandbox Code Playgroud)
AppConstants.m
#import "AppConstants.h"
#ifdef DEBUG
NSString* const kAppBaseURL = @"http://192.168.0.123/";
#else
NSString* const kAppBaseURL = @"http://website.com/";
#endif
Run Code Online (Sandbox Code Playgroud)
然后在你的{$ APP} -Prefix.pch文件中:
#ifdef __OBJC__
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import "AppConstants.h"
#endif
Run Code Online (Sandbox Code Playgroud)
如果遇到任何问题,请首先确保将"预编译前缀标题"选项设置为"否".
您还可以像这样连接字符串常量:
#define kBaseURL @"http://myServer.com"
#define kFullURL kBaseURL @"/api/request"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
87902 次 |
最近记录: |