我尝试在类中定义const NSString。
我做了以下事情:
.h: 中的
.m: #import <Foundation/Foundation.h>
@interface GlobalDataModel : NSObject
@property (nonatomic, strong) NSMutableDictionary *infoDictionary;
+ (id)sharedDataModel;
extern NSString * const WS_URL;
@end
用法: 现在,我可以做到 但不是 因为intellisense中没有WS_URL。#import "GlobalDataModel.h"
@implementation GlobalDataModel
static GlobalDataModel *sharedInstance = nil;
NSString * const WS_URL = @"http://localhost:57435/IosService.asmx";
- (id)init{
self = [super init];
if (self) {
self.infoDictionary = [NSMutableDictionary dictionary];
}
return self;
}
+ (id )sharedDataModel {
if (nil != sharedInstance) {
return sharedInstance;
}
static dispatch_once_t pred; // Lock
dispatch_once(&pred, ^{ // This code is called at most once per app
sharedInstance = [[self alloc] init];
});
return sharedInstance;
}
@end
#import "GlobalDataModel.h"
GlobalDataModel *model = [GlobalDataModel sharedDataModel];
NSString *temp = model.infoDictionary[@"xxx"];
NSString *temp = model.WS_URL
答案 0 :(得分:1)
这就是为什么NSString * const
与NSString const *
不同的类型,因此编译器会重新定义WS_URL
。
修改强>
如果你认为你已经以这种方式宣布了一个常数,那么你可以做一些像
这样的事情#import "GlobalDataModel.h"
.
.
GlobalDataModel *model = [GlobalDataModel new];
model.WS_URL;
.
你错了,不可能:我建议你改用 readonly属性来返回那个常量。
所以,试试这样的事情
// GlobalDataModel.m
static NSString * const kURL = @"http://localhost:57435/IosService.asmx";
.
.
- (NSString *)WS_URL
{
return [NSString stringWithString:kURL];
}
// GlobalDataModel.h
.
.
@property (nonatomic, readonly) NSString *WS_URL;
.
答案 1 :(得分:0)
您可以使用具有以下常量的模块:
Constants.h:
extern NSString * const WS_URL;
Constants.m
#import "Constants.h"
NSString * const WS_URL = @"blabla";
在Module.m中
#import "Constants.h"
...
NSString* str = [NSString stringWithFormat: @"blabla=%@", WS_URL];