javascript - react native Swift 回调

标签 javascript swift callback react-native

我想从 React Native 发送一个字符串到 Swift 实现的模块,然后从本地模块中获取一个字符串结果作为回调以供进一步使用。

这是我得到的:

//HelloWorldModule.m

#import "RCTBridgeModule.h"

@interface RCT_EXTERN_MODULE(HelloWorldModule, NSObject)

RCT_EXTERN_METHOD(sayHelloWorld:(NSString *)name callback:(RCTResponseSenderBlock *)successCallback)

@end

除了 Swift 实现之外:

//  HelloWorldModule.swift

import Foundation
import UIKit
import AVFoundation

@objc(HelloWorldModule)
class HelloWorldModule: NSObject {

  @objc func sayHelloWorld(name: String,  callback successCallback: RCTResponseSenderBlock) {
    NSLog("Log from Swift: \(name)")
    successCallback([name])
  }
}

最后是 ReactNative 部分:

// requiring the Swift module in React Native
var HelloWorldModule = require('react-native').NativeModules.HelloWorldModule;

...

// using it somewhere in the render function

render: function() {
       return (
        <Text>
          Hello World Module answers: {this.hwmExt("Jadzia Dax")}
        </Text>
       );
},

hwmExt: function(name) {
    return HelloWorldModule.sayHelloWorld(name, function(result) {
       var hwAnswer = "swiftCB: " + result;
       console.log(hwAnswer);
       return hwAnswer;
    });
}

console.log(hwAnswer); 打印出我期望的内容 swiftCB: Jadzia Dax 但是结果没有被传递?我是否在 Swift 的方法定义中做错了什么,因为我总是未定义?不知何故对这个问题视而不见:/不幸的是,RN 文档中也没有涵盖 React Native Swift 模块回调。

最佳答案

RCTResponseSenderBlock 回调遵循 Node.js 错误优先风格,即第一个回调参数包含错误,第二个参数包含结果.

在您的示例中,您为错误 返回了一个值,而没有为结果 返回值,因此未定义。您应该返回 NSNull 作为错误(第一个)参数,而 name 作为第二个参数,例如[NSNUll(), 名称]

This short blog post展示了如何使用 Swift 和 React Native 来做到这一点。在blog发布,请参阅 MySwiftThingy.swift 中的 11 行。

关于javascript - react native Swift 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34626046/

相关文章:

ios - 将 CLLocationCooperative2D 分配给空白而不是 NIL

swift - 有人可以解释为什么我在更改一行代码时收到一条错误消息,提示我缺少返回

java - 使用 ActivityLifecycleCallbacks 自动记录 Android 生命周期事件?

javascript - 为什么 json-parser 解析错误我的 json

当存在 (-,/) 时,Javascript RegEx :/(\b\S+\b)(? =.*\b\1\b)/删除重复单词有时会失败

javascript - Angular 图表自定义工具提示位置未按预期工作

javascript - Javascript中的回调机制

javascript - 更改更新下拉菜单在 keyup 上附加结果

ios - 当我移动到另一个 View Controller 时如何停止视频背景?

node.js - 代码模式相当于 Node JS 中阻塞条件下的链式 if/elseif?