React Native Bridging: Passing JSON to Swift function

一个人想着一个人 提交于 2019-12-06 13:57:43

Your objective-c method signature set trackingInfo as NSDictionary, but your Swift method signature accepts a Dictionary<String: Any>so this two signature doesn't match.

You have to re-write your method and manually manage NSDictionary to Dictionary cast:

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" }]
);

**notice that you have a typo on JS part

Rajat Sajnani

Your answer did help me alot but still i had one problem

it was fixed by adding _ in your swift code at start of the line

@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)
}              
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!