React NativeReact Native

React Native - iOS 导出常量

2017-10-30  本文已影响93人  村雨灬龑

导出常量

原生模块可以导出一些常量,这些常量在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),然后再传递给你导出的函数。

上一篇下一篇

猜你喜欢

热点阅读