我想从React Native向Swift实现的模块发送一个String,然后从本机模块获取一个String结果作为回调以供进一步使用.
这是我得到的:
//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 (Hello World Module answers: {this.hwmExt("Jadzia Dax")} ); }, 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的方法定义中做错了什么,因为我总是未定义?不知何故对这个问题视而不见:/ React Native Swift模块回调很遗憾也没有在RN文档中介绍过.
该RCTResponseSenderBlock
回调如下Node.js的错误首次风格即第一回调PARAM持有错误和第二PARAM持有的结果.
在您的示例中,您将返回错误值,因此没有值结果undefined
.您应该返回NSNull
错误(第一个)参数,并name
作为第二个参数,例如[NSNUll(), name]
.
这篇简短的博文显示了如何使用Swift和React Native完成此操作.在博客的帖子,看到线11在MySwiftThingy.swift
.