导出常量
原生模块可以导出一些常量,这些常量在JavaScript端随时都可以访问。用这种方法来传递一些静态数据,可以避免通过bridge进行一次来回交互。
OC中,我们实现constantsToExport
方法,如下:
- (NSDictionary *)constantsToExport {
return @{ @"Constant1" : @"常量1",
@"Constant2" : @"常量2",
};
}
JS中,我们打印一下这个常量
const constant = NativeModules.原生模块.常量的key;
console.log("Constant1 value is ", constant);
但是注意这个常量仅仅在初始化的时候导出了一次,所以即使你在运行期间改变constantToExport
返回的值,也不会影响到JavaScript环境下所得到的结果。
枚举常量
用NS_ENUM
定义的枚举类型必须要先扩展对应的RCTConvert
方法才可以作为函数参数传递。
假设我们要导出如下的NS_ENUM
定义:
typedef NS_ENUM(NSInteger, UIStatusBarAnimation) {
UIStatusBarAnimationNone,
UIStatusBarAnimationFade,
UIStatusBarAnimationSlide,
};
你需要这样来扩展RCTConvert类:
@implementation RCTConvert (StatusBarAnimation)
RCT_ENUM_CONVERTER(UIStatusBarAnimation, (@{ @"statusBarAnimationNone": @(UIStatusBarAnimationNone),@"statusBarAnimationFade" : @(UIStatusBarAnimationFade),@"statusBarAnimationSlide" : @(UIStatusBarAnimationSlide)}),UIStatusBarAnimationNone, integerValue)
@end
接着你可以这样定义方法并且导出enum值作为常量:
- (NSDictionary *)constantsToExport{
return @{ @"statusBarAnimationNone" : @(UIStatusBarAnimationNone),
@"statusBarAnimationFade" : @(UIStatusBarAnimationFade),
@"statusBarAnimationSlide" : @(UIStatusBarAnimationSlide)}
};
RCT_EXPORT_METHOD(updateStatusBarAnimation:(UIStatusBarAnimation)animation completion:(RCTResponseSenderBlock)callback)
你的枚举现在会用上面提供的选择器进行转换(上面的例子中是integerValue),然后再传递给你导出的函数。
网友评论