Вам нужно
do {
let json = try JSONSerialization.jsonObject(with: data!, options: []) as! [String:[String]]
let arr1 = json["Categories"]!
let str1 = arr1.joined(separator: ":")
print(str1)
// or
let decoded = try JSONDecoder().decode(Root.self, from: data)
let str = decoded.categories.joined(separator: ":")
print(str)
} catch {
print(error)
}
или использовать
struct Root: Codable {
let categories: [String]
enum CodingKeys: String, CodingKey {
case categories = "Categories"
}
}
У меня была такая же проблема с медленным движком jscript ie7. Я добавил всплывающее окно статуса для человека. Я обновляю окно статуса, поскольку JS продолжается частями. Псевдокод:
var t = setTimeout("next_step(2)", 0); // Where arg of 2 would mean do the second step // This will yield to the browser, and the display will then be updated. // If you want to maintain the value of "this" in the function, then do // something like var t = setTimeout("next_step.call(MyContext, 2)", 0); // using call to set the function's context.
Суть в том, что пользователь увидит что-то меняющееся на экране. Заметьте, что шаг уступки с таймаутом 0 занимает довольно много времени, условно говоря. Так что мой код тестирует браузер и выполняет больше работы на блок, если это что-то кроме IE.
Очень важно предоставить изменяющуюся обратную связь пользователю. В противном случае они думают, что это займет больше времени, чем на самом деле.
HTH,
Ларри
На самом деле ты мало что можешь сделать. Механизм javascript в IE намного медленнее, чем любой другой (на самом деле, это отстой). Вы можете попробовать IE8. Это лучше лучше ... незначительно ...
Как преодолеть эту проблему? Любая помощь будет принята с благодарностью.
Обнаружьте IE7 при загрузке страницы и предоставьте отдельное предложение, что пользователи, которые не любят медленную загрузку, должны обновить.
Мне пришлось бы увидеть реальный код, но столкнувшись с аналогичной проблемой, мне пришлось избавиться от jQuery.load () . Вместо этого я использовал jQuery.get () с типом данных «html» и написал свой собственный обратный вызов, в который я ввел данные через .innerHTML . При этом я обнаружил еще одну ошибку (это был тег
Полученный код был примерно таким:
// Fetch data (GET method allows me to use browser cache)
$.get(url, get, function(htmlValues, txtStatus){
that.populateSelects(htmlValues, that.selectContainers);
}, "html");
// Create <select>
var select = $('<span><select disabled="disabled"></select></span>');
$("<option>").attr("value", "").text("Loading...").appendTo(select.find("select"));
// Populate <select>
that.populateSelects = function(values, selectContainers){
var span, select, tags;
for(var i=0, len=selectContainers.length; i<len; i++){
span = selectContainers[i];
if($.browser.msie){
tags = span.innerHTML.match(/^(<select[^>]+>).*(<\/select>)$/i);
span.innerHTML = tags[1] + values + tags[2];
select = span.firstChild;
}else{
select = span.firstChild;
select.innerHTML = values;
}
$(select).removeAttr("disabled");
}
}