-2

我尝试在一个类中定义一个 const NSString。

我做了以下事情:

在.h中:

#import <Foundation/Foundation.h>

@interface GlobalDataModel : NSObject

@property (nonatomic, strong) NSMutableDictionary *infoDictionary;

+ (id)sharedDataModel;

extern NSString * const WS_URL;

@end

以 .m 为单位:

#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

因为智能感知中没有 WS_URL。

4

2 回答 2

1

这就是为什么NSString * const是一个不同的类型,NSString const *所以编译器会看到你的WS_URL.

编辑

如果你认为你以这种方式声明了一个常量,你可以做类似的事情

#import "GlobalDataModel.h"
.
.
GlobalDataModel *model = [GlobalDataModel new];
model.WS_URL;
.

你错了,这是不可能的:我建议你改用只读属性返回该常量。

所以,试试这样的

// 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;
.
于 2013-06-26T18:08:57.670 回答
0

您可以使用带有常量的模块,如下所示:

常量.h:

extern NSString * const WS_URL;

常数.m

#import "Constants.h"   

NSString * const WS_URL = @"blabla";

在模块.m

#import "Constants.h"

...

NSString* str = [NSString stringWithFormat: @"blabla=%@", WS_URL];
于 2013-06-26T18:37:49.960 回答