1

我正在绑定一个 ObjC 库,一切正常,但我有一个问题。ObjC 库正在使用在单独的标头中定义的一些值。

例如,带有以下内容的标题:

#define SOME_PROPERTY_1 TRUE
#define SOME_PROPERTY_2 TRUE
#define SOME_PROPERTY_3 FALSE

根据这些属性,库将对视图进行一些更改(因此这些更改在库中,而不是在我的 C# 代码中)。

我想从我的 C# 代码中访问这些属性,以便我可以更改它们。现在,如果我想更改它们并且我无法动态更改它们(目标是什么),我需要再次构建我的库。

这可能吗?

我已经对此进行了搜索,但我不明白这两个建议的解决方案:

  1. 将它们放在我的 C# 代码中而不是绑定中 -> 我认为这不是一个解决方案,因为在这种情况下,库将不知道这些更改?(无连接)
  2. 将它们绑定为(静态)属性

不幸的是,我不知道该怎么做。在这个标题中,这些不是类/接口,只有#DEF 语句,所以我不知道我应该在哪个“类”中定义这些属性。

然后将标头包含在其他一些 ObjC 类中。我试图看看我是否可以在那里定义它们,但它是一个接口并且属性不被接受。

所以基本上,我绑定了一个“SomeController”类,并且“SomeController.h”被定义为接口

@interface SomeController : UIViewController

然后在“SomeController.m”中你有

#import "Constants.h" //The file with only #DEF statements
@implementation SomeController
{
...
}

有任何想法吗?

问候, 马特

4

1 回答 1

2

这是不可能的,因为您的 SOME_PROPERTY_# 实际上不是变量,它们是预处理指令。

这意味着 ObjectiveC 预处理器会将源代码中 SOME_PROPERTY_# 的所有实例替换为您定义的值,但最终可执行文件中没有 SOME_PROPERTY_# 变量/常量。

例如:

#define SOME_PROPERTY_1 TRUE
void foo ()
{
    Bool value = SOME_PROPERTY_1;
}

将由预处理器转换为:

void foo ()
{
    Bool value = TRUE;
}

如您所见,转换后的源代码中没有 SOME_PROPERTY_1 。

这意味着您不能动态更改 SOME_PROPERTY_# 的值。

于 2013-01-05T00:25:02.653 回答