我正在开发一个用Objective C编写的iOS应用程序,它有一个用Swift编写的附加类。当我尝试在我的Obj C AppDelegate.m中调用一个时,我没有收到任何错误,但回复回调永远不会触发。
我的ObjC有以下方法:
public void test() {
new Thread(runWaitResponseProcedure).start();
}
Runnable runWaitResponseProcedure = new Runnable() {
startTimer();
}
- (void)application:(UIApplication *)application handleWatchKitExtensionRequest:(NSDictionary *)userInfo reply:(void(^)(NSDictionary *replyInfo))reply {
NSString *success =[ApiController handleCall];
//NSString *success =[self hello]; // This works if you swap it with the above method
//NSString *success = @"hello"; // when uncommented this also works.
NSDictionary *dict = @{@"status" : success};
reply(dict);
}
-(NSString *)hello{
return @"hello";
}
我的快速课程看起来像这样:
NSString *success = [SwiftClass swiftMethod];
除了上面的代码之外,我还确保包含@objc class SwiftClass {
@objc func swiftMethod()->NSString{
return "it works!"
}
}
,并为swift代码创建桥接头。
我错过了什么吗?
答案 0 :(得分:6)
swiftMethod
是实例方法,而不是类方法。你可以这样称呼它:
NSString *success = [[SwiftClass new] swiftMethod];
如果要将其称为类方法,则需要使用class
声明它:
@objc class SwiftClass {
@objc class func swiftMethod()->NSString{
return "it works!"
}
}
答案 1 :(得分:0)
此外,您必须在课程和方法
之前添加@objc
@objc class MyClass: NSObjec {
@objc func methodName() {
}
}