我想从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方法定义方面是否有什么问题,因为我总是得到未定义的结果?不知何故,我一直被这个问题困扰着 :/ 遗憾的是React Native Swift模块回调在RN文档中没有涉及。