- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我定义了一个自定义错误域,我想在协议(protocol)中发布它。该域在实现文件中定义如下:
//in the .m file
static void *MyErrorDomain = (void *)@"MyErrorDomain";
.h 文件实现了一个协议(protocol),我也想在那里发布 MyErrorDomain。但是,我无法找出正确的形式。错误最少的一个是:
// in the protocol
static extern void * TBPluginErrorDomain;
Xcode 错误是:“声明说明符中存在多个存储类”。
我认为 static void 构造将 MyErrorDomain 变成了一种函数,但是“static extern void TBPluginErrorDomain();”只增加了错误的数量。简而言之,我正徘徊在无知的泥沼中,非常感谢所有指导。
最佳答案
在顶层,static
表示“无法在该文件之外直接访问(没有指针)”(文件范围)。 extern
意思是“在其他目标文件中定义”。 static extern
确实没有任何意义。这就像请求访问另一个类的私有(private)成员一样。您不想使用static
在这里。
只需在 .m
中进行正常定义即可:
void *MyErrorDomain = @"MyErrorDomain";
并在 .h
中做出外部声明:
extern void *MyErrorDomain;
请务必链接到 .o
来自.m
每当您将使用该变量的内容链接在一起时(在包含 .h
文件之后)。在 Xcode 中,在“获取信息”窗口的“目标”选项卡中查找 .m
文件中,请务必检查使用该变量的每个目标(在新版本中可能略有不同,我的是旧版本!)。
您可以添加 const
( const …
和 extern const …
),但 NSString 实例是不可变的,所以它并不是完全必要的。你可以把它变成 const
但是指针,因此不能在运行时直接更改指针(不丢弃 const
ness)。你们一起拥有const void * const MyErrorDomain
在定义中。只需在其前面加上 extern
即可在声明中。
此外,根据您的目的,您可以考虑使用 NSString *
而不是void *
.
关于objective-c - 如何在协议(protocol)中发布 static void NSString?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2147023/
我是一名优秀的程序员,十分优秀!