objective-c - react native 桥接 : Passing JSON to Swift function

标签 objective-c json swift react-native objective-c-swift-bridge

我是 Swift 和 Objective-C 的新手,但我正在尝试搭建从 React Native 到 Swift 的桥梁,并将一个 JSON 和一个 JSON 数组作为参数发送到 Swift。

在 React 中我想调用这个函数:

startTrack('some url string', { artist: 'Bruce Springsteen', title: 'Born in the USA' }, [{ url: 'url', type: 'image' }, { url: 'another url', type: 'link' ]})

所以一个字符串、一个对象和一个对象数组。

在我的 bridge objective-c 文件中我有这个:

RCT_EXTERN_METHOD(startTrack:(NSString *)url trackinfo:(NSDictionary *)trackinfo slides:(NSDictionaryArray *)slides)

在我的 swift 文件中,我尝试了很多组合,但似乎没有通过:

  @objc func startTrack(url: String, trackinfo: [String: Any], slides: [[String: Any]]) {
    print("Play test", url, trackinfo, slides)
  }

我收到此错误消息: react native error message

如何将我的参数一直发送到我的 Swift 文件?

谢谢

/彼得

最佳答案

您的 objective-c 方法签名集 trackingInfo作为NSDictionary ,但是您的 Swift 方法签名接受 Dictionary<String: Any>所以这两个签名不匹配。

您必须重写您的方法并手动管理 NSDictionary 到 Dictionary 的转换:

objective-c

RCT_EXTERN_METHOD(startTrack:(NSString *)url trackinfo:(NSDictionary *)trackinfo slides:(NSDictionaryArray *)slides)

swift

@objc func startTrack(url: String, trackinfo: NSDictionary, slides: [NSDictionary]) {
    guard let infoDictionary = trackinfo as? [String: Any],
          let slidesDictionary = slides as? [[String: Any]] else {
        return
    } 
    print("Play test", url, infoDictionary, slidesDictionary)
}

JS

startTrack(
  "some url string",
  { artist: "Bruce Springsteen", title: "Born in the USA" },
  [{ url: "url", type: "image" }, { url: "another url", type: "link" }]
);

**注意你在 JS 部分有错别字

关于objective-c - react native 桥接 : Passing JSON to Swift function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40876436/

相关文章:

javascript - 如何向 highstock 图表添加辅助轴?

java - 如何在android中使用json检索多维数组

ios - 与 Alamofire 一起使用时未调用 cellForRowAtIndexPath

ios - 如何根据不同 NSArray 中的相同对象顺序将 NSArray 项目分组?

objective-c - 添加应在所有 View Controller 中可见的按钮

ios - UITableView 被释放,而键值观察者仍然在其中注册

ios - 使用 DKImagePickerController 在 ScrollView 上显示多个图像

objective-c - 使用 mailcore2 从 IMAP 帐户详细信息中获取完整的电子邮件地址

java - 如何在 Jackson JSON(反)序列化中使用自定义键类型自定义序列化或转换 Map 属性?

Swift Perfect Heroku 无法检测到 set buildpack