创建本机模块(IOS)

介绍

来自 http://facebook.github.io/react-native/docs/native-modules-ios.html

有时,应用程序需要访问平台 API,而 React Native 还没有相应的模块。也许你想重用一些现有的 Objective-C,Swift 或 C++代码而不必在 JavaScript 中重新实现它,或者编写一些高性能的多线程代码,例如用于图像处理,数据库或任何数量的高级扩展。

Native Module 只是一个实现 RCTBridgeModule 协议的 Objective-C 类。

在你的 Xcode 项目中创建一个新文件并选择 Cocoa Touch Class ,在创建向导中为你的类选择一个名称( 例如 NativeModule ),使其成为子类NSObject 并选择 Objective-C 作为语言。

这将创建两个文件 NativeModuleEx.hNativeModuleEx.m

你需要将 RCTBridgeModule.h 导入 NativeModuleEx.h 文件,如下所示:

#import <Foundation/Foundation.h>
#import "RCTBridgeModule.h"

@interface NativeModuleEx : NSObject <RCTBridgeModule>

@end

在你的 NativeModuleEx.m 中添加以下代码:

#import "NativeModuleEx.h"

@implementation NativeModuleEx

RCT_EXPORT_MODULE();

RCT_EXPORT_METHOD(testModule:(NSString *)string )
{
  NSLog(@"The string '%@' comes from JavaScript! ", string);
}

@end

RCT_EXPORT_MODULE() 将使你的模块可以在 JavaScript 中访问,你可以传递一个可选参数来指定其名称。如果未提供名称,则它将与 Objective-C 类名称匹配。

RCT_EXPORT_METHOD() 会将你的方法公开给 JavaScript,只有你使用此宏导出的方法才能在 JavaScript 中访问。

最后,在你的 JavaScript 中,你可以调用你的方法,如下所示:

import { NativeModules } from 'react-native';

var NativeModuleEx = NativeModules.NativeModuleEx;

NativeModuleEx.testModule('Some String !');