我正在尝试使用我可以在我的javascript代码中调用的函数创建一个本机swift模块。目前,我有module.swift
文件,我的module.m
文件和桥接标题。
这是MyModule.swift:
import Foundation
@objc(MyModule)
class MyModule: NSObject {
@objc func callbackMethod(callback: RCTResponseSenderBlock) -> Void {
let resultsDict = [
"success" : true
];
callback([NSNull() ,resultsDict])
}
}
这是MyModule.m:
#import <Foundation/Foundation.h>
// CalendarManagerBridge.m
#import <React/RCTBridgeModule.h>
#import <React/RCTEventEmitter.h>
@interface RCT_EXTERN_MODULE(MyModule, NSObject)
RCT_EXTERN_METHOD(callbackMethod:(RCTResponseSenderBlock)callback)
@end
这是桥接标题:
#import React/RCTBridgeModule.h
#import React/RCTEventEmitter.h
最后,这是我在javascript中的调用:
const { MyModule } = require('NativeModules');
MyModule.callbackMethod((err,r) => console.log(r));
问题是每当我运行项目时,都会导致错误:
Exception 'callbackMethod:(RCTResponseSenderBlock)callback is not a recognized Objective-c
method.'
但是,我发现文档没有任何问题。有人可以提供一些帮助吗?
答案 0 :(得分:3)
出于某种原因,我们现在需要以不同的方式编写@objc
部分。
更改
@objc func callbackMethod(callback: RCTResponseSenderBlock) -> Void {
let resultsDict = [
"success" : true
];
callback([NSNull() ,resultsDict])
要
@objc(callbackMethod:)
func callbackMethod(callback: RCTResponseSenderBlock) -> Void {
let resultsDict = [
"success" : true
];
callback([NSNull() ,resultsDict])