9

在名为 Ad 的类的 .m 文件中,我有 3 个静态字符串

static NSString *AdStateDisabled = @"disable";
static NSString *AdStateExpired = @"expired";
static NSString *AdStateActive = @"active";

我可以简单地在当前类中使用这些静态变量,但我不能从任何其他类中调用它们,有没有办法让这些静态变量成为全局变量?因此,例如在我的视图控制器类中,我可以做类似的事情。

//HomeViewController.m
if ([self.ad.state isEqual:Ad.AdStateDisabled])
{
     //do something
}
4

2 回答 2

18

您可以将以下声明添加到您的 HomeViewController.h 标头中,然后需要将其导入您想要访问字符串的任何位置。

//HomeViewController.h
extern NSString *AdStateDisabled;
extern NSString *AdStateExpired;
extern NSString *AdStateActive;

然后更改您的定义以删除“静态”。

//HomeViewController.m
NSString *AdStateDisabled = @"disable";
NSString *AdStateExpired = @"expired";
NSString *AdStateActive = @"active";

如果您不希望字符串的用户必须导入 HomeViewController.h,那么您也可以在 AdState.h 中定义这些字符串并将定义放入 AdState.m(并将它们从 HomeViewController.m 中删除),之后用户的字符串只需要导入 AdState.h 即可使用这些字符串。

于 2010-10-19T04:36:09.277 回答
10

首先,去除静电。C 和 Objective-C 中的静态变量和函数意味着它们仅对当前编译单元可见(或多或少:只有您在其中声明了 statix 变量的文件才能看到它)。

接下来,您还需要使用“extern”在公共头文件中声明变量,例如与该类关联的类之一:

extern NSString *AdStateDisabled;

然后,您也可以在其他文件中使用它们,但您不能将它们作为“Ad.AdStateDisabled”访问,而只是作为“AdStateDisabled”访问。

于 2010-10-19T04:44:21.910 回答