2

我正在使用带有 swift的 create-react-native-module创建本机模块。之后,我遵循了 iOS 设置的 react native 官方文档。文档链接:: https://facebook.github.io/react-native/docs/native-modules-ios

我用示例创建了 create-react-native-module。我只是在我的本机模块中添加带有返回字符串“Hello World”的简单函数。

我的'CustomModule-Bridging-Header.h'::

#import <React/RCTBridgeModule.h>

我的'CustomModule.m'::

#import <React/RCTBridgeModule.h>

@interface RCT_EXTERN_MODULE(CustomModule, NSObject)

RCT_EXTERN_METHOD(sampleMethod)

+ (BOOL) requiresMainQueueSetup {
  return YES;
}

@end

我的“CustomModule.swift”:

import Foundation

@objc(CustomModule)
class CustomModule: NSObject {
  @objc(sampleMethod)
  func sampleMethod() -> String {
      return "Hello World"
  }
}

在对本机模块进行这些更改后,我在示例中再次安装了依赖项。现在我的 App.js 看起来像::

import React, { Component } from 'react';
import { Platform, Text, View } from 'react-native';
import CustomModule from 'react-native-custom-module';

export default class App extends Component {
    state = {
        message: '--'
    };

    async componentDidMount() {
        const msg = await CustomModule.sampleMethod();
        console.log('javascript calling msg::', msg);
        this.setState({
            message: msg
        });
    }
    render() {
        return (
            <View>
                <Text>CustomModule example☆&lt;/Text>
                <Text>{this.state.message}</Text>
            </View>
        );
    }
}

在这里,我将“msg”值设为未定义。请帮忙!

4

1 回答 1

1

您需要使用承诺或回调从本机函数返回值。简单地返回值是行不通的。

使用承诺的示例:

CustomModule.swift

@objc
func sampleMethod(_ resolve: RCTPromiseResolveBlock, rejecter reject: RCTPromiseRejectBlock) {
  resolve("Hello World")
}

自定义模块.m

RCT_EXTERN_METHOD(sampleMethod: (RCTPromiseResolveBlock)resolve rejecter: (RCTPromiseRejectBlock)reject)
于 2020-02-21T14:32:33.083 回答