React Native 到 Swift 桥 - 传递参数和回调
Posted
技术标签:
【中文标题】React Native 到 Swift 桥 - 传递参数和回调【英文标题】:React Native to Swift bridge - passing both a parameter and a callback 【发布时间】:2020-09-03 20:21:40 【问题描述】:我正在尝试将 base64 图像字符串发送给 swift,并且我希望在我的回电中返回给我的图像分类。但是,我可以传递一个字符串,并且可以成功地单独传递一个回调,但是当我将它们加在一起时,我会收到:
Exception 'bothClassifyAndCallback: is not a recognized Objective-C method.
这是我的 bridge.m - 注意方法分类和 myCallback 工作正常
#import "React/RCTBridgeModule.h"
@interface RCT_EXTERN_MODULE( ImageClassifier, NSObject )
RCT_EXTERN_METHOD( classify: (NSString*)img )
RCT_EXTERN_METHOD( myCallback: (RCTResponseSenderBlock)callback )
RCT_EXTERN_METHOD( bothClassifyAndCallback: (NSString*)img (RCTResponseSenderBlock)callback)
@end
这是我的 bridge.swift 文件
import Foundation
@objc( ImageClassifier )
class ImageClassifier: NSObject
@objc
func classify( _ img: String )
print( img )
@objc
func myCallback( _ callback: RCTResponseSenderBlock )
callback([ "From swift to js" ])
@objc
func bothClassifyAndCallback( _ img: String, _ callback: RCTResponseSenderBlock )
print( img )
return callback( [ "recieving and returning to js" ] )
@objc
static func requiresMainQueueSetup() -> Bool
return true
这是我在 react native 中的调用
class BridgeTest extends React.Component
constructor()
super()
this.classifier = NativeModules.ImageClassifier
onPress = () =>
this.classifier.classify( "from js" ) // this works
this.classifier.myCallback( ( arg ) => console.log( "my arg is" + arg ) ) // This works
this.classifier.bothClassifyAndCallback( "argument", ( arg ) => console.log( "my arg is " + arg ) )
render()
return( <Button title="bridge" onPress=this.onPress></Button> )
export default BridgeTest
我怀疑我在这里错了:
RCT_EXTERN_METHOD( bothClassifyAndCallback: (NSString*)img (RCTResponseSenderBlock)callback)
但是在尝试了几种变体之后,我无法让它发挥作用。谢谢。
【问题讨论】:
【参考方案1】:您需要对bothClassifyAndCallback
进行轻微修改
ImageClassifier
和 bridge.m
用于 @objc
声明。
在图像分类器
中@objc(bothClassifyAndCallback: resolver:)
func bothClassifyAndCallback( _ img: String, resolver callback: RCTResponseSenderBlock )
print( img )
return callback( [ "recieving and returning to js" ] )
在 Bridge.m
RCT_EXTERN_METHOD( bothClassifyAndCallback: (NSString*)img resolver: (RCTResponseSenderBlock)callback)
【讨论】:
整整一年后。我终于可以完成了哈哈!谢谢。以上是关于React Native 到 Swift 桥 - 传递参数和回调的主要内容,如果未能解决你的问题,请参考以下文章
如何将 React Native Promise 连接到 Swift
React-Native:无法触发 Native UIButton 触摸事件
将现有的移动应用程序从 Android Native(Java) 和 IOS Native(Swift) 迁移到 React Native