绑定#define用作常量

时间:2013-03-11 23:46:15

标签: objective-c binding xamarin.ios

我尝试绑定的代码在其中一个.h文件中放置了一个非常重要的键:

#define xAppKey @"REPLACE_WITH_YOUR_APP_KEY"

然后在整个ObjC代码中重用该值。我怀疑在绑定过程中,这个值没有贯彻。根据SO上的其他几个主题,至少似乎就是这种情况。我的问题可能是其他问题,还是有可能在包装的代码中没有兑现这个值?

对不起,如果我的目标c术语已关闭,我对此一无所知。

修改

我只想澄清一些可能不明显的事情。通过"绑定"我指的是将它绑定到monotouch作为本机库。如果已经清楚了,继续......

2 个答案:

答案 0 :(得分:4)

xAppKey是一个宏。它根本不受约束。反之。在预编译时,它将替换为@"REPLACE_WITH_YOUR_APP_KEY",然后编译,就像这个字符串一直重复一样。

正是由于这个原因,一些专家建议用常量字符串替换它们。这些专家可能是对的。但是,我喜欢#define。

正是出于这个原因,你不应该在#define语句中添加任何注释。

#define xAppKey @"REPLACE_WITH_YOUR_APP_KEY" // This is the application key

这样的事情几乎肯定会导致编译时错误,这可能很难理解。 示例:

NSLog (@"%@", xAppKey); 

在注释中工作正常,因为它将转换为:

NSLog (@"%@", @"REPLACE_WITH_YOUR_APP_KEY"); 

但是评论将转换为:

NSLog (@"%@", @"REPLACE_WITH_YOUR_APP_KEY" // This is the application key);

这不会编译。

答案 1 :(得分:2)

在Obj-C #define中拥有.h的目的是允许它由利用库的应用程序替换。在这种情况下,您的(Obj-C)库可能仅作为源分发。

但是你想为它创建(Xamarin.iOS)绑定。所以你需要编译这个库,并且编译将一劳永逸地修复xApiKey的值。

您的目标可能是通过Xamarin.iOS将此xApiKey公开给消费者应用程序。您必须修改Obj-C库以使用属性而不是常量,然后通过Xamarin.iOS绑定(静态)属性访问器