【问题标题】:Pass Optional JSON to Swift from react-native将可选 JSON 从 react-native 传递给 Swift
【发布时间】:2018-05-18 00:19:50
【问题描述】:

假设我有以下 Swift 类:

@objc(ExampleClass)
  class ExampleClass: NSObject {
  init() {}
  @objc func exampleMethod(_ message: String, _ properties: [String: Any]? = nil) -> Void {}
}

还有下面的Header:

#import <Foundation/Foundation.h>
#import <React/RCTBridgeModule.h>

@interface RCT_EXTERN_MODULE(ExampleClass, NSObject)

RCT_EXTERN_METHOD(exampleMethod:(NSString *)name (NSDictionary *)properties)
@end

然后我使用以下 React Native 代码调用:

import { NativeModules } from 'react-native'

NativeModules.ExampleClass.exampleMethod('example', {'hello': 'world'})

这会导致以下错误消息:

ExceptionsManager.js:73 Exception 'exampleMethod: is not a recognized Objective-C method.' was thrown while invoking trackEvent on target SegmentTracker with params (
    "example",
        {
        hello = world;
    }
)

虽然这样称呼它:

NativeModules.ExampleClass.exampleMethod('example')

结果:

ExceptionsManager.js:73 Exception 'exampleMethod: is not a recognized Objective-C method.' was thrown while invoking trackEvent on target SegmentTracker with params (
    "example"
)

我有两个问题: 1) 如何将 JSON 从 React Native 传递给 Swift? 2) 如何正确允许 RCT_EXTERN_METHOD 中的可选参数?如果这不可能,我该如何处理我有时想传递第二个参数,有时又不想传递的情况?

【问题讨论】:

    标签: objective-c json swift react-native optional


    【解决方案1】:

    您可以尝试使用 NSDictionary 类型的属性,使其适合界面。它可能类似于:

    react-native-bridging-passing-json-to-swift-function

    【讨论】:

      【解决方案2】:

      需要在swift代码中使用静态方法 @objc static func exampleMethod(...

      【讨论】:

        【解决方案3】:

        你的 swift 代码应该是

        @objc(ExampleClass)
        class ExampleClass: NSObject {
          @objc(exampleMethod:properties:) func exampleMethod(_ message: String, properties: [String: Any]? = nil) -> Void {}
        }
        

        你的桥接文件应该是

        #import <Foundation/Foundation.h>
        #import <React/RCTBridgeModule.h>
        
        @interface RCT_EXTERN_MODULE(ExampleClass, NSObject)
        
        RCT_EXTERN_METHOD(exampleMethod:(NSString *)name properties:(NSDictionary *)properties)
        @end
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-09-07
          • 2021-03-17
          • 2020-03-28
          • 1970-01-01
          • 2019-05-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多