Eli*_*oij 11 cocoa protocols constants objective-c nsstring
我已经定义了一个我的所有插件必须实现的协议.我也希望所有插件都使用某些字符串,比如MyPluginErrorDomain.使用整数这很容易在枚举中实现,但我无法弄清楚如何用字符串做同样的事情.通常,在课程中我会定义
extern NSString * const MyPluginErrorDomain;
Run Code Online (Sandbox Code Playgroud)
在.h文件和.m文件中:
NSString * const MyPluginErrorDomain = @"MyPluginErrorDomain";
Run Code Online (Sandbox Code Playgroud)
但是这在协议中不能很好地工作,因为每个插件都必须提供自己的实现,这违背了具有常量的目的.
然后我试过了
#define MYPLUGIN_ERROR_DOMAIN @"MyPluginErrorDomain"
Run Code Online (Sandbox Code Playgroud)
但是插件中的实现类似乎看不到#define.谁知道一个好的解决方案?
phi*_*red 10
您可以使用协议在标头中声明它们(但在协议接口本身之外),然后在协议的实现文件中定义它们(显然它不会有一个@implementation部分 - 只是您的NSString定义).
或者有一个单独的.h/.m对,它只适用于字符串常量(协议头可以导入字符串常量头).
你保留.h定义:
extern NSString * const MyPluginErrorDomain;
Run Code Online (Sandbox Code Playgroud)
但将此部分放入一个单独的.m文件中,该文件包含在您的框架中:
NSString * const MyPluginErrorDomain = @"MyPluginErrorDomain";
Run Code Online (Sandbox Code Playgroud)
所以插件仍然可以实现接口,但是在编译时,它们会在你的其他.m文件中链接或编译,所以他们会看到它的值MyPluginErrorDomain.