在使用swift写react native自定义module时,按官网简单的写了一个demo 方法
// CalendarManager.swift
@objc(CalendarManager)
class CalendarManager: NSObject {
@objc func say(name: String) -> Void {
// Date is ready to use!
print(name);
}
}
// CalendarManagerBridge.m
#import "RCTBridgeModule.h"
@interface RCT_EXTERN_MODULE(CalendarManager, NSObject)
RCT_EXTERN_METHOD(say:(NSString *)name)
@end
// CalendarManager-Bridging-Header.h
#import "RCTBridgeModule.h"
然后在JS端调用
var CalendarManager = NativeModules.CalendarManager;
CalendarManager.say('调用成功');
但是并没有想象的那么顺利,它报了个错误
is not a recognized Objective-C method
问题原因:
如果你是使用swift 3,那么这是swift 3语法上的错误,在swift 3定义方法时,参数需要指定外部参数名称,如果没有指定的话,默认是和内部参数名称一样的,也可以使用下划线,使调用者不用传参数名。
由于JS端无法传递参数名称,因此我们需要不使用参数名称的情况,say方法修改如下:
@objc func say(_ name: String) -> Void {
// Date is ready to use!
print(name);
}
在参数名称前面加个下划线即可。