我绑定了一个ObjC库,一切运行良好,但我有一个问题。 ObjC库使用的是一些在单独标题中定义的值。
例如,标题为:
#define SOME_PROPERTY_1 TRUE
#define SOME_PROPERTY_2 TRUE
#define SOME_PROPERTY_3 FALSE
依赖于这些属性,库将对视图进行一些更改(因此这些更改位于库中,而不是我的C#代码中。)
我想从我的C#代码访问这些属性,以便我可以更改它们。现在我需要再次构建我的库,如果我想要更改它们,我无法动态更改它们(目标是什么)。
这可能吗?
我已经对此进行了搜索,但我不明白这两个提议的解决方案:
不幸的是,我不知道该怎么做。在这个标题中,这些不是Class / Interface,只有#DEF语句,所以我不知道我应该在哪个'class'中定义这些属性。
然后,标题包含在其他一些ObjC类中。我试图看看我是否可以在那里定义它们,但它是一个接口,不接受属性。
所以基本上,我正在绑定一个“SomeController”类,而“SomeController.h”被定义为接口
@interface SomeController : UIViewController
然后在“SomeController.m”中你有
#import "Constants.h" //The file with only #DEF statements
@implementation SomeController
{
...
}
有什么想法吗?
此致 马特
答案 0 :(得分:2)
这是不可能的,因为你的SOME_PROPERTY_#实际上不是变量,它们是预处理指令。
这意味着ObjectiveC预处理器将使用您定义的值替换源代码中的所有SOME_PROPERTY_#实例,但最终可执行文件中没有SOME_PROPERTY_#variable / constant。
例如:
#define SOME_PROPERTY_1 TRUE
void foo ()
{
Bool value = SOME_PROPERTY_1;
}
将由预处理器转换为此:
void foo ()
{
Bool value = TRUE;
}
如您所见,转换后的源代码中没有SOME_PROPERTY_1。
这意味着您无法动态更改SOME_PROPERTY_#的值。