使用 swift 将导出的方法值作为未定义来反应本机本机模块?

Posted

技术标签:

【中文标题】使用 swift 将导出的方法值作为未定义来反应本机本机模块?【英文标题】:React native native modules with swift getting exported method value as undefined? 【发布时间】:2020-02-07 13:00:14 【问题描述】:

我正在使用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☆</Text>
                <Text>this.state.message</Text>
            </View>
        );
    

在这里,我得到未定义的“msg”值。请帮忙!

【问题讨论】:

嗨@Archana Sharma 当您第一次从命令行创建 react-native-module 时,您是如何解决“”文件未找到问题的。我收到上述错误。你能告诉我吗? 【参考方案1】:

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

使用承诺的示例:

CustomModule.swift

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

CustomModule.m

RCT_EXTERN_METHOD(sampleMethod: (RCTPromiseResolveBlock)resolve rejecter: (RCTPromiseRejectBlock)reject)

【讨论】:

如何解析查询?您提到了 resolve("Hello World")。如果我有一个 HKStatisticsQuery 并且我需要在我的 JS 文件中读取它怎么办。我该如何解决这个问题???

以上是关于使用 swift 将导出的方法值作为未定义来反应本机本机模块?的主要内容,如果未能解决你的问题,请参考以下文章

返回值总是未定义

尝试将数据从我的 firebase 数据导出到 csv 文件给出未定义

Swift UITest - 将使用两者之一。哪个是未定义的

反应表中的导出到 CSV 按钮

作为对象的 Vue 道具的反应性

React 16.14.0:未捕获错误 ReferenceError:未定义导出