gpt4 book ai didi

objective-c - 如何在协议(protocol)中发布 static void NSString?

转载 作者:行者123 更新时间:2023-12-03 17:45:10 26 4
gpt4 key购买 nike

我定义了一个自定义错误域,我想在协议(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com