4

我是 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' ]})

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

在我的桥目标 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)
  }

我收到此错误消息: 反应本机错误消息

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

谢谢

/彼得

4

2 回答 2

4

您的 Objective-c 方法签名设置trackingInfoNSDictionary,但您的 Swift 方法签名接受 aDictionary<String: Any>所以这两个签名不匹配。

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

目标-c

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

迅速

@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 部分有错字

于 2018-11-21T13:39:26.473 回答
2

你的回答确实帮了我很多,但我仍然有一个问题

_它是通过在行首添加您的快速代码来 修复的

@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)
}              
于 2019-10-09T06:17:03.297 回答