React Native 到 Swift 的桥接 - 传递参数和回调函数

4

我试图将base64图像字符串发送给Swift,并希望在回调中返回图像的分类。然而,我可以单独传递字符串和回调,但是当我将它们合并在一起时,我收到以下错误:

Exception 'bothClassifyAndCallback: is not a recognized Objective-C method.

这是我的bridge.m文件 - 注意,方法classify和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个回答

1

您需要对ImageClassifierbridge.m中的bothClassifyAndCallback进行轻微修改,以实现@objc声明。

ImageClassifier中:

@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)

终于一年后,我终于可以完成这个哈哈!谢谢。 - sin tribu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接