快速调用objective-c类方法
Posted
技术标签:
【中文标题】快速调用objective-c类方法【英文标题】:call objective-c class method in swift 【发布时间】:2015-08-18 14:34:38 【问题描述】:我的 ios 项目同时包含 Objective-c 代码和 swift 代码。
说,我有一个名为Task
的类,它包含一个类方法 do
:
@interface Task: NSObject
+ (void) doSomething:(NSString *) value;
@end
上面的@interface 声明在Task.h 文件中。其他objective-c 类可以毫无问题地调用该方法。
我的swift代码要调用doSomething
方法,
Task.doSomething(“do task now!”)
但是上面这行代码得到如下编译错误:
‘Task.Type’ does not have a member named ‘doSomething’.
为什么?在swift代码中调用objective-c类方法的正确方法是什么?
(生成的objective-c和swift之间的桥接接口没有问题。)
【问题讨论】:
这可能只是贴出的代码中的一个类型,但是方法声明在obj-c接口中需要一个分号。 我只是忘记添加分号,我的objective-c代码中有分号。 您能否澄清您引用的@interface 声明位于哪个文件中?它需要在 .h 文件中才能看到。其他 Objective-c 类是否能够调用该方法? 我更新了我的问题,@interface 声明在 Task.h 中,其他objective-c 类可以毫无问题地调用该方法 【参考方案1】:我认为问题在于“do”是保留关键字。我尝试了这个并得到了一个稍微不同的错误(关于在一段时间循环中丢失了一个括号),但是将方法更改为“doSomething”解决了这个问题。
通过将@interface 声明移动到Task.m 而不是Task.h,我能够重现您看到的错误。请确认您在哪里拥有此代码,因为它仅在 .h 文件中对其他类可见。
【讨论】:
如果是这个问题,可以用背包引用它来解决:Task.`do`("do task now!")
谢谢,但do
只是我的问题中的示例方法,在我的真实代码中,名称绝对不是保留关键字。我用doSomething
更新了我的问题以避免这种误导。此外,我的接口声明在它的 Task.h 中。
您可以在您的问题中添加一个桥接头的副本吗?以上是关于快速调用objective-c类方法的主要内容,如果未能解决你的问题,请参考以下文章
使用另一个 C++ 类作为参数从 Objective-C(++) 调用 C++ 方法