ReactNativeでiosのネイティブモジュールを作る

以下の記事の翻訳です。

https://teabreak.e-spres-oh.com/swift-in-react-native-the-ultimate-guide-part-1-modules-9bb8d054db03

## 新しいreact nativeプロジェクトの作成


react-native init CounterApp
cd CounterApp
react-native run-ios

次に
ios/CounterApp.xcodeproj
をxcodeで開いてください。

## Swift ファイルの作成
xcodeでcmd+Nを押して新しいファイルを作ります。
Counterというクラス名でSwiftファイルを作成します。

Swiftファイルを作成した後、Objective-C Bridging Headerを作るか聞かれるので、作成してください。

ファイル名は<プロジェクト名>-Bridging-Header.hですが、絶対に名前を変更しないでください。
xcodeのBuildSettingsでこの名前を利用しています。
プロジェクトにつき、Objective-C Bridging Headerは一つだけです。

Objective-C Bridging Headerに必要なライブラリをインポートします。

// CounterApp-Bridging-Header.h
#import "React/RCTBridgeModule.h"

## Swiftクラスの作成
Counterという空のクラスを作成します。このクラスはNSObjectを継承している必要があります。
そのためobject-cへエクスポーズ出来ます。

// Counter.swift
import Foundation
@objc(Counter)
class Counter: NSObject {
}

## どうやってSwiftのクラスをJSにエクスポーズするのか?
object-cのマクロであるRCT_EXTERN_MODULEを使用します。

xcodeからcmd+nで新しいファイル作成プロンプトを開き、object-cファイルをを選択して、Counterというファイルを作成します。

// Counter.m
#import "React/RCTBridgeModule.h"
@interface RCT_EXTERN_MODULE(Counter, NSObject)
@end

RCTBridgeModuleをインポートする必要があります。
これでjs側でswiftのCounterクラスを使用出来る様になりました。

RCT_EXTERN_MODULEの最初の引数はSwiftのクラス、二番目の引数はスーパークラスです。

## js側からnativeModuleへアクセスする。
App.jsでnativeModulesを呼び出してみます。

// App.js
import { NativeModules } from 'react-native'
console.log(NativeModules.Counter)
// or NativeModules.RNCounter, if you have renamed it

コンソールに表示されれば完成です。

続く。

続きは翻訳元を読んでください。
https://teabreak.e-spres-oh.com/swift-in-react-native-the-ultimate-guide-part-1-modules-9bb8d054db03

この記事が気に入ったらサポートをしてみませんか?