我是 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)
}
如何将我的参数一直发送到我的 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/