我想在objective-c中定义一个常量.
以前我有以下功能:
+(NSString *) getDocumentsDir {
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex: 0];
paths = nil;
return documentsDir;
}
Run Code Online (Sandbox Code Playgroud)
我想只定义一个常量"Documents_Dir" - 当函数被调用时,之后访问以前创建的值.
我尝试了以下代码,但没有用:
#define getDocumentsDir \
{ \
#ifdef Documents_Dir \
return Documents_Dir; \
#else \
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); \
NSString *documentsDir = [paths objectAtIndex: 0]; \
#define Documents_Dir [paths objectAtIndex: 0]; \
paths = nil; \
return Documents_Dir; \
#endif \
} \
Run Code Online (Sandbox Code Playgroud)
我对预编译器指令不太满意,所以任何帮助都将不胜感激.
我正在使用一组Constant.m文件,每个目标一个,为每个目标定义特定的东西.例如:
// Constants.h
extern NSString * const kDatabaseFileName;
//Constants.m
NSString * const kDatabaseFileName = @"target_one.sqlite";
Run Code Online (Sandbox Code Playgroud)
我还想为每个目标定义一个NSArray:
NSArray * const kLabelNames = [[NSArray alloc] initWithObjects:
@"nameLabel", @"addressLabel", nil];
Run Code Online (Sandbox Code Playgroud)
但是这给出了"错误:初始化元素不是常数".使用'arrayWithObjects`也不起作用.这是因为我的数组中的字符串不是常量吗?
如何将数组设置为全局常量?谢谢.
我有这个代码(较大部分的小块 - 只是这里显示的麻烦部分):
#define kSizeLarge @"large"
-(void)determineBestFileSizeWithLimit:(int)limit
{
static NSString *largeName = kSizeLarge;
static NSArray *nameArray = @[kSizeLarge];
...
}
Run Code Online (Sandbox Code Playgroud)
编译器喜欢第一个静态变量而讨厌第二个静态变量
Initializer element is not a compile-time constant
Run Code Online (Sandbox Code Playgroud)
从第二行删除静态使编译器感到高兴.
我做错了什么/不正确?
将包含c样式数组的最佳语法传递NSString*给objective-c方法是什么?这是我目前正在使用的:
- (void) f:(NSString **) a {
}
- (void) g {
NSString* a[2] = {@"something", @"else"};
[self f:a];
}
Run Code Online (Sandbox Code Playgroud)