首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >React Native Bridging:将JSON传递给Swift函数

React Native Bridging:将JSON传递给Swift函数
EN

Stack Overflow用户
提问于 2016-11-30 05:52:43
回答 2查看 3.7K关注 0票数 4

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

在React内部,我想调用这个函数:

代码语言:javascript
复制
startTrack('some url string', { artist: 'Bruce Springsteen', title: 'Born in the USA' }, [{ url: 'url', type: 'image' }, { url: 'another url', type: 'link' ]})

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

在我的桥接objective-c文件中,我有以下内容:

代码语言:javascript
复制
RCT_EXTERN_METHOD(startTrack:(NSString *)url trackinfo:(NSDictionary *)trackinfo slides:(NSDictionaryArray *)slides)

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

代码语言:javascript
复制
  @objc func startTrack(url: String, trackinfo: [String: Any], slides: [[String: Any]]) {
    print("Play test", url, trackinfo, slides)
  }

我收到这个错误消息:

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

谢谢

/Peter

EN

回答 2

Stack Overflow用户

发布于 2018-11-21 21:39:26

您的objective-c方法签名将trackingInfo设置为NSDictionary,但是您的Swift方法签名接受Dictionary<String: Any>,因此这两个签名不匹配。

您必须重写您的方法并手动管理NSDictionary to Dictionary cast:

Objective-c

代码语言:javascript
复制
RCT_EXTERN_METHOD(startTrack:(NSString *)url trackinfo:(NSDictionary *)trackinfo slides:(NSDictionaryArray *)slides)

斯威夫特

代码语言:javascript
复制
@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

代码语言:javascript
复制
startTrack(
  "some url string",
  { artist: "Bruce Springsteen", title: "Born in the USA" },
  [{ url: "url", type: "image" }, { url: "another url", type: "link" }]
);

**请注意,JS部分有一个拼写错误

票数 4
EN

Stack Overflow用户

发布于 2019-10-09 14:17:03

你的回答确实对我有很大帮助,但我仍然有一个问题

通过在swift代码中的行首添加_修复了此问题

代码语言:javascript
复制
@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)
}              
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40876436

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档