我正在使用 Webview
与 js
进行通信。我再次将收到的数据传输到参数 api 中。但是,当 Swift
从 JS
获取数组时,Swift
无法正确识别它。
JS 数据发送到哪里
var jsonData = {
data,
type : "fromjs"
};
alert(jsonData)
webkit.messageHandlers.sendFromJS.postMessage(jsonData);
警报查看的数据
{
"type" = "fromjs",
"data" = {
"num": "one",
"arr_data" : [{ "title": "test1", "val" : "testval1" },
{ "title": "test2" , "val" : "testval2"}]
}
}
我检查 Swift 收到的数据。
@available(iOS 8.0, *)
func userContentController(_ userContentController: WKUserContentController, didReceive message: WKScriptMessage) {
if message.name == "sendFromJS" {
let getdata = message.body as! NSDictionary
print(getdata)
但是 Swift 无法正确识别该数组。
{
type = "fromjs",
data = {
"num": "one",
"arr_data" : ({ "title": "test1", "val" : "testval1" },
{ "title": "test2" , "val" : "testval2"})
}
}
Swift
将方括号识别为圆括号。
如何解决这个问题?我必须将收到的数据按原样放入参数中来发送。
func apiCall(_ param: NSDictionary){
let parameters: [String: AnyObject] = param["data"] as! [String : AnyObject]
Alamofire.request(url, method: .post, parameters: parameters, encoding: URLEncoding.default, headers: headers)
我更改了数据类型。但同样无法识别。
let getdata = message.body as! [String : Any]
print(getdata)
//log
[
type = "fromjs",
data = {
"num": "one",
"arr_data" : ({ "title": "test1", "val" : "testval1" },
{ "title": "test2" , "val" : "testval2"})
}
]
在js中创建json数据
var data = {
num: "one"
};
var data_arr = [];
data_arr.push({"title": "test1", "val" : "testval1"});
data_arr.push({"title": "test2" , "val" : "testval2"});
data.arr_data = data_arr;
var jsonData = {
data,
type : "fromjs"
};
alert(jsonData)
webkit.messageHandlers.sendFromJS.postMessage(jsonData);
最佳答案
这只是 JSON
和传统 NeXT 属性列表表示数组的方式不同。
示例
let json = """{ "a": [1, 2, 3] }"""
let jsonData = try! JSONSerialization.jsonObject(with: Data(json.utf8), options: [])
print("plist:", jsonData)
let jsonString = try! JSONSerialization.data(withJSONObject: d, options: [.prettyPrinted])
print("json:", String(data: jsonString, encoding: .utf8)!)
打印日志
plist: {
a = (
1,
2,
3
);
}
json: {
"a" : [
1,
2,
3
]
}
属性列表使用 ( … ) 呈现数组,但这只是一种呈现方式。实际对象是正确的,事实证明我可以将它们转回我开始使用的一些 JSON。
关于javascript - 为什么Swift无法识别JS发送的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58868886/