ios - 将一个以函数作为参数的 Swift 方法导出到 React Native
问题描述
我正在尝试将一个以函数作为参数的 Swift 方法导出到 React Native。我所做的如下:
在RNMyClass.swift
文件中:
import Foundation
@objc(RNMyClass)
class RNMyClass: NSObject {
@objc func someMethod(_ successCallback: (String) -> Void) -> Void {
//Some code goes here...
}
}
在RNMyClass.m
文件中:
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface RCT_EXTERN_MODULE(RNMyClass, NSObject)
RCT_EXTERN_METHOD(someMethod:((*)(NSString *))successCallback)
@end
我通过运行以下命令在 iOS 模拟器上启动程序:
npx react-native start
和
npx react-native run-ios
该代码在 XCode 13.0 上编译并开始在 iOS 模拟器 15.0 上运行,但是当它遇到我从 react native 调用此方法的部分时,iOS 程序崩溃并且模拟器进入主屏幕。
我在这里做错了什么?
解决方案
事实证明,我应该使用RCTResponseSenderBlock
像这样的讨厌的 Swift 闭包和 Objective-C 函数指针:
import Foundation
@objc(RNMyClass)
class RNMyClass: NSObject {
@objc func someMethod(_ successCallback: RCTResponseSenderBlock) -> Void {
successCallback([NSNull(), "response from swift"])
}
}
#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>
@interface RCT_EXTERN_MODULE(RNMyClass, NSObject)
RCT_EXTERN_METHOD(someMethod:(RCTResponseSenderBlock)successCallback)
@end
React Native JavaScript 代码应该是这样的:
import { NativeModules } from 'react-native';
NativeModules.RNMyClass.someMethod((err, str) => console.log(str));
推荐阅读
- python - 为什么我收到 OSError:[WinError 193] %1 不是有效的 Win32 应用程序
- fabricjs - SVG背景没有在fabricjs中填充画布
- docusignapi - 演示 Docusign Connect 通知“已发送”不起作用
- go - 从 URL 查询参数解码 JSON
- node.js - 在 Express Nodejs 中记录用户活动
- angular - Angular Slickgrid - 基于网格数据加载单选编辑器集合
- java - Java 8 2 个不同列表的比较
- mule - Dataweave 2.0 中的 Excel 到 Json 映射
- mysql - SQL:检测多个相同的条目作为一个批次
- marklogic - 当任务服务器负载不足时,减少延迟或优先处理应用服务器 (XDBC/HTTP) 上的传入请求